<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
<rss version="2.0">
  <channel>
    <title>IT瘾ubuntu推荐</title>
    <link>https://itindex.net/categories/ubuntu</link>
    <description>IT社区推荐资讯 - ITIndex.net</description>
    <language>zh</language>
    <copyright>https://itindex.net/</copyright>
    <generator>https://itindex.net/</generator>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>https://itindex.net/images/logo.gif</url>
      <title>IT社区推荐资讯 - ITIndex.net</title>
      <link>https://itindex.net/categories/ubuntu</link>
    </image>
    <item>
      <title>基于 Ubuntu 20.04 部署 1.23版K8S 集群</title>
      <link>https://itindex.net/detail/62033-ubuntu-k8s-%E9%9B%86%E7%BE%A4</link>
      <description>&lt;p&gt;从今天开始，我将开始连载《图解 K8S》入门系列文章&lt;/p&gt;
 &lt;blockquote&gt;  &lt;p&gt;
  更多系列文章，可以微信搜索公众号： 写点代码的明哥，回复 k8s 获取全系列教程
&lt;/p&gt;&lt;/blockquote&gt;
 &lt;p&gt;本篇是做为系列的第一篇文章，先来带大家一起搭建一个可用的 K8S 环境。&lt;/p&gt;
 &lt;p&gt;K8S 环境的搭建，是很多想学习 K8S 的人止于在入门之外的第一道门槛，不少人在这一道关上就被直接被劝退了。&lt;/p&gt;
 &lt;p&gt;为什么呢？主要有如下三点：&lt;/p&gt;
 &lt;ol&gt;
  &lt;li&gt;   &lt;strong&gt;网络问题&lt;/strong&gt;：K8S 是 Google 开发的，官方最新镜像都在墙外，安装时下载不了镜像&lt;/li&gt;
  &lt;li&gt;   &lt;strong&gt;机器问题&lt;/strong&gt;：K8S 运行的组件非常多，对于机器本身有要求，配置不能低，如果要搭建集群，还需要多台机器，是笔不小的开销。&lt;/li&gt;
  &lt;li&gt;   &lt;strong&gt;运维问题&lt;/strong&gt;：K8S 的部署安装和维护，涉及到不少 Linux 及网络相关的内容，需要有一定的运维能力&lt;/li&gt;
&lt;/ol&gt;
 &lt;p&gt;不过在如今，其实已经出现了非常多的 K8S 部署工具，有的是图形化界面安装，也有的甚至做到了一条命令安装。&lt;/p&gt;
 &lt;p&gt;这些工具，给新手提供了一个比较友好的部署解决方案，不过很遗憾的是，我大多没有用过，因为我认为这些工具隐藏了太多原生的 K8S 部署细节，比如安装了哪些组件，是怎么安装的？组件之间的依赖关系，网络是如何走的？&lt;/p&gt;
 &lt;p&gt;而这些细节，对于我们以后进行环境的维护、问题的排查会不小的帮助。&lt;/p&gt;
 &lt;p&gt;因此，我个人从一开始就不建议新手去使用那些太高级的部署工具。。&lt;/p&gt;
 &lt;p&gt;但也不能没有部署工具，所有的组件都手动安装，我想会逼疯很多新手。&lt;/p&gt;
 &lt;p&gt;因此，我这边选用官方推荐的 kubeadm 工具进行演示，带大家一起搭建个可用的 K8S 环境。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115160335896.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;h2&gt;1. 环境说明&lt;/h2&gt;
 &lt;p&gt;K8S 环境，可以分为单节点和多节点集群环境两种。&lt;/p&gt;
 &lt;p&gt;单节点的话，部署非常简单，对于一般的学习概念来说，也是够用了，除了一些需要多节点支持的功能，比如 DeamonSet ，比如调度策略验证等&lt;/p&gt;
 &lt;p&gt;而线上生产的环境，都应该是分布式的集群，只是这一套环境搭建下来需要多台的机器。&lt;/p&gt;
 &lt;p&gt;你可以在自己的电脑上创建几台虚拟机，本文我以我的 mac （16 G）为例，创建两台虚拟机，实际上带三台也没有问题，如此你是 windows ，请确保你的配置。&lt;/p&gt;
 &lt;p&gt;当然也可以选择去各大云厂商那里购买机器，个人感觉应该要不少钱，愿意投资的可以上。&lt;/p&gt;
 &lt;p&gt;由于后续肯定会用得上多节点，因此本篇只讲下多节点的集群搭建方法，如果你觉得自己当前想先试试水先学习一下一些基本的内容，可以在本文的评论区留言一下，我考虑剥离出一篇个单节点的 K8S 搭建方法，方法都大同小异。&lt;/p&gt;
 &lt;h2&gt;2. 集群架构&lt;/h2&gt;
 &lt;p&gt;K8S 中节点节点的角色，可以分为两种：&lt;/p&gt;
 &lt;ul&gt;
  &lt;li&gt;一种是 控制节点，也即 Master 节点，主要运行控制平面的组件，如 kube-apiserver 等&lt;/li&gt;
  &lt;li&gt;一种是 计算节点，也即 Worker 节点，主要运行业务上的组件，比如 web server 等&lt;/li&gt;
&lt;/ul&gt;
 &lt;p&gt;Master 节点是整个集群的大脑，一个集群只有一个 Master 节点肯定是不行的，通常来说，要至少三个，做下高可用。&lt;/p&gt;
 &lt;p&gt;但由于我们仅仅是学习之用，没有集群稳定安全性考虑，这里就不需要浪费资源去搞高可用。&lt;/p&gt;
 &lt;p&gt;因此，我的集群是一个 Master 节点，N 个 Worker 节点（下文中仅演示一个 worker 的部署，多个 worker 类似），管理网段是 172.20.20.0/24，ip 如图所示&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115154309179.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;h2&gt;3. 网络环境&lt;/h2&gt;
 &lt;p&gt;集群的安装需要联网下载很多的镜像，因此在开始安装之前请保证你的所有节点都可以正常联网。&lt;/p&gt;
 &lt;p&gt;对于在云厂商购买的云主机来说，都有公网 ip，这个自不用担心。&lt;/p&gt;
 &lt;p&gt;可对于在本地电脑上创建的虚拟机做为 K8S 节点的朋友，可以跟着我一起操作。&lt;/p&gt;
 &lt;p&gt;我的个人电脑是 最新款（2021）的 Macbook M1 Pro 内存仅有 16 G，现在我的电脑上已经安装好Mac 上的桌面虚拟化软件  Parallels Desktop，在 Parallels Desktop 的入口就可以下载 Ubuntu 20.04 ，请注意，这边下载的是桌面版的 Linux，本来我机器配置就不高，再使用桌面版的，实在太消耗资源了。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220114000344874.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;可以在这里下载服务器版的 Ubuntu：https://ubuntu.com/download/server/arm，会小很多，只有 1.1G。&lt;/p&gt;
 &lt;p&gt;下载完成后，可以自行安装，相信大多数人都知道如何操作，明哥这里就不会多费口舌，不懂的在留言区交流吧&lt;/p&gt;
 &lt;p&gt;等虚拟机安装完成后，别着急启动，可以先配置下网段。&lt;/p&gt;
 &lt;p&gt;如下图所示 点  &lt;code&gt;网络&lt;/code&gt; -&amp;gt;   &lt;code&gt;高级&lt;/code&gt;，再点打开   &lt;code&gt;网络首选项&lt;/code&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220114234334048.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;将桥接（Shared）的网络改为 172.20.20.0/24，也即 172.20.20.1-172.20.20.254&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220114234430742.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;一旦你修改后，Paralles Desktop 就会感知，并修改本机上 bridge100 的 ip 地址为 172.20.20.0/24 里的 ip，这里分配的 ip 是 172.20.20.2，与虚拟机的网络在同一网段，如此一来，宿主机就能和虚拟机进行通信。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220114234653073.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;网络配置好后，正常启动虚拟机，可以看到虚拟机已经自动配置上 172.20.20.3 的 ip，这是怎么做到的呢？&lt;/p&gt;
 &lt;p&gt;原来在 netplan 的配置文件中 /etc/netplan/00-installer-config.yaml，配置了 enp0s5 启用 dhcp 获取 ip。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="image-20220114233633735" src="http://image.iswbm.com/image-20220114233633735.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;这种动态获取的 ip，会导致同一节点在不同时间、场景下获取到的 ip 可能是不一样的。&lt;/p&gt;
 &lt;p&gt;对于 K8S 集群环境来说，管理网络的 ip 应该固定的，否则会造成通信的混乱。&lt;/p&gt;
 &lt;p&gt;因此我们应该把规划好的 ip 地址写死到配置文件中，写好后，使用 netplan apply 使之生效&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220114234038804.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;由于 ip 发生了变化，因此重启网络后，当前的 ssh 连接会断网,退出后，再次使用 172.20.20.200 就可以再次登陆，会发现 enp0s5 的 ip 已经按预期配置成 172.20.20.200 了。&lt;/p&gt;
 &lt;p&gt;尝试 ping 114.114.114.114 ，发现网络是不通的，这是为什么呢？&lt;/p&gt;
 &lt;p&gt;原来上面在 netplan 的配置文件中并没有指明网关地址，那网关地址是多少呢？&lt;/p&gt;
 &lt;p&gt;此时我们回想之间 bridge100 的 ip 是 172.20.20.2 ，为什么不是我们定义的 172.20.20.0/24 网段的第一个 ip 172.20.20.1  呢？&lt;/p&gt;
 &lt;p&gt;这是因为这个 ip 被 PD 拿去做网关了，因此我们只要往配置文件中加上网关再重新 netplan apply 即可&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115104935290.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;完整的配置文件如下&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;# /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    enp0s5:
      dhcp4: no
      addresses: [172.20.20.200/24]
      optional: true
      gateway4: 172.20.20.1
      nameservers:
        addresses: [114.114.114.114]
  version: 2
&lt;/code&gt;&lt;/pre&gt;
 &lt;h2&gt;4. 基础环境&lt;/h2&gt;
 &lt;h3&gt;4.1 关闭 swapoff&lt;/h3&gt;
 &lt;p&gt;在旧版的 k8s 中 kubelet 都要求关闭 swapoff ，但最新版的 kubelet 其实已经支持 swap ，因此这一步其实可以不做。&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~sudo swapoff -a

# 修改/etc/fstab，注释掉swap那行，持久化生效
iswbm@master:~ sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;4.2 修改时区&lt;/h3&gt;
 &lt;p&gt;修改一下时区，由原来的 UTC 变成了 CST，中间差了 8 个小时&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~date
Sat 15 Jan 2022 02:22:44 AM UTC
iswbm@master:~ sudo timedatectl set-timezone Asia/Shanghai
iswbm@master:~$ date
Sat 15 Jan 2022 10:22:55 AM CST
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;修改后，如果想使得系统日志的时间戳也立即生效，由重启 rsyslog&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~$ sudo systemctl restart rsyslog
&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;4.3 设置内核参数&lt;/h3&gt;
 &lt;p&gt;首先确认你的系统已经加载了 br_netfilter 模块，默认是没有该模块的，需要你先安装 bridge-utils&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;sudo apt-get install -y bridge-utils
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;然后再使用 modprobe 加载一下， lsmod 就能看到 br_netfilter 模块，此时再确认一下 内核参数 net.bridge.bridge-nf-call-iptables 是否为 1。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115110938052.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;在Ubuntu 20.04 Server上，这个值就是1。如果你的系统上不一致，使用下面的命令来修改：&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
&lt;/code&gt;&lt;/pre&gt;
 &lt;h2&gt;5. 基础软件&lt;/h2&gt;
 &lt;blockquote&gt;  &lt;p&gt;
  本小节的步骤在 master 及 worker 执行
&lt;/p&gt;&lt;/blockquote&gt;
 &lt;h3&gt;5.1  安装 Docker&lt;/h3&gt;
 &lt;p&gt;目前的 Ubuntu 已经有提供 Docker 的安装包，直接安装即可&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;# 安装 docker
iswbm@master:~sudo apt install docker.io

# 启动 docker 
iswbm@master:~ sudo systemctl start docker

# 开机自启
iswbm@master:~$ sudo systemctl enable docker
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;如果是旧版的 Ubuntu 还是建议按照官网(https://docs.docker.com/engine/install/ubuntu/)的操作去安装&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115111904248.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;但  ubuntu 20.04 源里提供的 Docker 版本还是比较新的，是 20.10.7，可以直接使用，我从 Docker 官网里看到的当前最新 Docker 版本是 20.10.12，只是差了几个小版本，区别不大。&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2
&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;5.2 安装 kubeadm kubectl&lt;/h3&gt;
 &lt;p&gt;以下操作在 master和 worker 节点 上执行，由于谷歌的源和 repo 在国内的是无法访问的，因此这里需要切换为 阿里源。&lt;/p&gt;
 &lt;p&gt;按顺序执行如下几条命令&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;# 安装基础软件并设置源
iswbm@master:~sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
iswbm@master:~ curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
iswbm@master:~sudo tee /etc/apt/sources.list.d/kubernetes.list &amp;lt;&amp;lt;EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

# 刷新软件列表，然后直接安装
iswbm@master:~ sudo apt-get update
iswbm@master:~sudo apt-get install -y kubelet kubeadm kubectl

# 阻止自动更新(apt upgrade时忽略)。所以更新的时候先unhold，更新完再hold。
iswbm@master:~ sudo apt-mark hold kubelet kubeadm kubectl
&lt;/code&gt;&lt;/pre&gt;
 &lt;h2&gt;6. 构建集群&lt;/h2&gt;
 &lt;h3&gt;6.1 部署 master&lt;/h3&gt;
 &lt;p&gt;网上 90% 的文章，都是使用 kubeadm init 加各种参数实现的部署，只要一条命令即可实现，就像这样&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;sudo kubeadm init --pod-network-cidr 172.16.0.0/16 \
    --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
    --apiserver-advertise-address 172.20.20.200 \
    --apiserver-bind-port 6443 
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;但这样的部署命令，在较新版本的 k8s （maybe 1.22 +）中是会部署失败的。&lt;/p&gt;
 &lt;p&gt;原因是 kubeadm 默认会将kubelet 的 cgroupDriver 字段设置为 systemd，&lt;/p&gt;
 &lt;p&gt;如果设置为 systemd ，kubelet 会启动不了。&lt;/p&gt;
 &lt;p&gt;经过我的摸索，kubeadm init 应该使用配置文件的方式进行部署&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~$ sudo kubeadm init --config kubeadm-config.yaml
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;而如果你安装的是旧版的 k8s ，则不用使用上面的方式，直接&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;sudo kubeadm init --pod-network-cidr 172.16.0.0/16 \
    --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
    --apiserver-advertise-address 172.20.20.200 \
    --apiserver-bind-port 6443 \
    --token-ttl 0
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;关于 kubeadm 更多常用的参数及中文解释我整理如下&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115114541775.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;咱们的目的是学习，对版本没有要求，就直接上最新版，因此只能用这种方式安装&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~$ sudo kubeadm init --config kubeadm-config.yaml
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;而这个 kubeadm-config.yaml 配置文件从哪里获取呢？我准备好一个，可以直接点这里进行下载 https://wwe.lanzout.com/iITg2yt0imd&lt;/p&gt;
 &lt;blockquote&gt;  &lt;p&gt;
     &lt;code&gt;kubeadm config print init-defaults&lt;/code&gt; 打印默认配置
&lt;/p&gt;&lt;/blockquote&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115123827184.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;执行完成后，会提醒你做三件事&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115124857562.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;第一件事：配置环境变量&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;以便你能正常使用 kubectl 进行集群的操作，对于常规用户用如下命令&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;mkdir -p HOME/.kube
sudo cp -i /etc/kubernetes/admin.confHOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;对于 root 用户，执行如下命令&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;export KUBECONFIG=/etc/kubernetes/admin.conf
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;  &lt;strong&gt;第二件事：将节点加入集群&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;后面我们要将 worker 节点加入集群，就要执行这条命令&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;sudo kubeadm join 172.20.20.200:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:4e4a7d0e848ae6c047d163fbe07f0e6975d71cc156d7705649241a59bbecaa04
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;这条命令是有有效期的，需要的时候，可以执行如下命令进行获取&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;kubeadm token create --print-join-command
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;到此，你的集群已经安装好了，可以查看一下集群的基本情况&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115125016189.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;第三件事：部署网络插件&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;这个我在图中没有圈出来，但它也是非常重要的，我放到   &lt;strong&gt;6.3 部署 calico&lt;/strong&gt; 这节里去做。&lt;/p&gt;
 &lt;h3&gt;6.2 部署 worker&lt;/h3&gt;
 &lt;p&gt;相比 master ，worker 的部署就简单许多了。&lt;/p&gt;
 &lt;p&gt;只要安装好了 docker、kubelet、kubeadm 软件，就可以执行前面的 join 命令直接加入集群&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;sudo kubeadm join 172.20.20.200:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:4e4a7d0e848ae6c047d163fbe07f0e6975d71cc156d7705649241a59bbecaa04
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;完成之后，再到 master 上查看 node ，若可以看到 worker 说明成功将 worker 加入集群中&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115143416848.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;h3&gt;6.3 部署 Calico&lt;/h3&gt;
 &lt;p&gt;上面其他我们已经部署好了 K8S 集群，但是由于还没有安装网络插件，因此整个集群实际上还是不能工作的，通过 kubectl get nodes 可以看到虽然已经有两个节点，但 Status 却都还是 NotReady 。&lt;/p&gt;
 &lt;p&gt;K8S 的网络插件有很多，常见的有   &lt;code&gt;flannel&lt;/code&gt;、  &lt;code&gt;calico&lt;/code&gt;、  &lt;code&gt;cilium&lt;/code&gt;、  &lt;code&gt;kube-ovn&lt;/code&gt; 等等。&lt;/p&gt;
 &lt;p&gt;更多支持的 CNI 可以在官方文档上找到列表：https://kubernetes.io/docs/concepts/cluster-administration/addons/&lt;/p&gt;
 &lt;p&gt;我大概数了一下，多达 16 个网络插件，太可怕了。&lt;/p&gt;
 &lt;p&gt;K8S 拥有如此多多的 CNI 网络插件，该如何做好CNI的技术选型，一个团队需要投入大量的精力进行调研。&lt;/p&gt;
 &lt;p&gt;Flannel 是 由CoreOS开发 的，K8S 最基础的网络插件，但是功能有限，一般仅供初学者学习使用，在生产中不推荐使用。&lt;/p&gt;
 &lt;p&gt;而其他的，Calico 是比较主流的选择（实际上我们公司使用的是 kube-ovn），因此我这里选择 Calico 进行安装&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="img" src="https://cdn.thenewstack.io/media/2020/03/51d8b8c6-ebpf-dp.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;安装 Calico 只需要一条命令即可。&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;安装完成后，会创建出这几个 Pod&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;iswbm@master:~$ kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-85b5b5888d-dbptz   1/1     Running   0          3m33s
kube-system   calico-node-8jt69                          1/1     Running   0          3m33s
kube-system   calico-node-t69qb                          1/1     Running   0          3m33s
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;同时之前由于没有安装网络插件而失败的 coredns pod 也开始成功拉起了&lt;/p&gt;
 &lt;p&gt;网络 ok 后，再次确认下集群的环境&lt;/p&gt;
 &lt;ul&gt;
  &lt;li&gt;所有的 Pod 均已 Running&lt;/li&gt;
  &lt;li&gt;所有的 node 均已 Ready&lt;/li&gt;
&lt;/ul&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115151114215.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;h2&gt;7. 验收集群&lt;/h2&gt;
 &lt;p&gt;关于 Pod 的概念，我将在后面慢慢介绍，现在你只要知道，Pod 是一个 K8S 最核心的资源对象，是最小的调度单位。&lt;/p&gt;
 &lt;p&gt;如果可以在 K8S 集群里，成功创建一个 Pod ，那就说明，你这个集群是健康的、可用的。&lt;/p&gt;
 &lt;p&gt;使用如下命令就可以创建一个最简单的 nginx pod&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;simple.pod 的 yaml 简单内容如下&lt;/p&gt;
 &lt;pre&gt;  &lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;执行后，通过 kubectl get pod 可以 观察到状态的变化&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115152133782.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;通过加   &lt;code&gt;-o wide&lt;/code&gt; 可以查看 pod 的 ip，再使用 curl，就可以访问这个 nginx 服务&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://image.iswbm.com/image-20220115152504605.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;至此，我们创建了第一个 pod 的，集群搭建完成。&lt;/p&gt;
 &lt;p&gt;恭喜你，已经完成了你学习 K8S 最艰难的一步 —   &lt;strong&gt;环境搭建&lt;/strong&gt;&lt;/p&gt;
 &lt;h2&gt;8. 写在最后&lt;/h2&gt;
 &lt;p&gt;本文虽然是在 mac 操作系统下进行演示，但机器对于搭建 K8S 集群本身并没有什么区别，最多也就虚拟机网络配置那里有所区别，但我相信这些对于正经的程序员来说，绝对不是什么难题。&lt;/p&gt;
 &lt;p&gt;本文完整复现了 K8S 集群的搭建过程，经历了   &lt;code&gt;自己搭建&lt;/code&gt; – &amp;gt;   &lt;code&gt;问题排查解决&lt;/code&gt; – &amp;gt;  &lt;code&gt;素材收集整理&lt;/code&gt; -&amp;gt;   &lt;code&gt;撰写文章&lt;/code&gt; ，全文经过多次修缮，前前后后一共花费了 6 个多小时的时间，才形成此文，可以达到让一个没有运维能力的纯新手也能无痛学习。&lt;/p&gt;
 &lt;p&gt;一篇文章的产出，需要经过如此长的时间，更新频率自然小很多，其实我也在考虑，之后要以一种怎样的风格来完成这个系列，是类似这样的万字长文呢？还是日更级别的，每天 5 分钟学习 K8S 呢？&lt;/p&gt;
 &lt;p&gt;对于我来说，我更倾向于前者，这样才能有条件把一个知识给讲透，而且能让你感受到我写这个系列的诚意。&lt;/p&gt;
 &lt;p&gt;但从读者的角度来看，应该是后者，更新频率太低，读者的脑子会断层，一个星期前的新知识，现在可能忘得差不多了。&lt;/p&gt;
 &lt;p&gt;你是怎么想的呢？欢迎你在评论区给我建议。&lt;/p&gt;
 &lt;blockquote&gt;  &lt;p&gt;
  更多系列文章，可以微信搜索公众号： 写点代码的明哥，回复 k8s 获取全系列教程
&lt;/p&gt;&lt;/blockquote&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>Kubernetes k8s Linux 投资 网络</category>
      <guid isPermaLink="true">https://itindex.net/detail/62033-ubuntu-k8s-%E9%9B%86%E7%BE%A4</guid>
      <pubDate>Sat, 15 Jan 2022 16:16:19 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu 20.04 部署kubernetes 1.22 集群</title>
      <link>https://itindex.net/detail/61865-ubuntu-kubernetes-%E9%9B%86%E7%BE%A4</link>
      <description>&lt;div&gt;  &lt;div&gt;
   &lt;div&gt;    &lt;div&gt;
     &lt;p&gt;由于众所周知的原因（F**K 红X），CentOS8的生命周期就快结束了，系统要转入Ubuntu的怀抱了，不过还好所有的应用都扔到kubernetes上了，迁移的难度大大降低。近期在做Ubuntu的测试，正好把在ubuntu 20.04 LTS 上部署最新的kubernetes记录下来&lt;/p&gt;



     &lt;p&gt;基础环境： &lt;/p&gt;



     &lt;p&gt;系统：ubuntu 20.04 LTS &lt;/p&gt;



     &lt;p&gt;master：172.19.82.170 &lt;/p&gt;



     &lt;p&gt;slave1：172.19.82.192 &lt;/p&gt;



     &lt;p&gt;slave2：172.19.82.160&lt;/p&gt;



     &lt;p&gt;基础组件：&lt;/p&gt;



     &lt;p&gt;$ sudo su# apt update &amp;amp;&amp;amp; apt upgrade -y &amp;amp;&amp;amp; init 6&lt;/p&gt;



     &lt;p&gt;# apt install -y net-tools lrzsz htop      &lt;br /&gt;&lt;/p&gt;



     &lt;p&gt;配置时间并令时间戳立即生效&lt;/p&gt;



     &lt;p&gt;# timedatectl set-timezone Asia/Shanghai &amp;amp;&amp;amp; systemctl restart rsyslog      &lt;br /&gt;&lt;/p&gt;



     &lt;p&gt;设置hosts解析：&lt;/p&gt;



     &lt;p&gt;# hostnamectl set-hostname master &amp;amp;&amp;amp; bash&lt;/p&gt;



     &lt;p&gt;# hostnamectl set-hostname slave1 &amp;amp;&amp;amp; bash&lt;/p&gt;



     &lt;p&gt;# hostnamectl set-hostname slave2 &amp;amp;&amp;amp; bash&lt;/p&gt;



     &lt;p&gt;# cat &amp;gt;&amp;gt; /etc/hosts&amp;lt;&amp;lt; EOF&lt;/p&gt;



     &lt;p&gt;172.19.82.170 master&lt;/p&gt;



     &lt;p&gt;172.19.82.192 slave1&lt;/p&gt;



     &lt;p&gt;172.19.82.160 slave2&lt;/p&gt;



     &lt;p&gt;EOF&lt;/p&gt;



     &lt;p&gt;关闭SWAP（过于简单就不写了）&lt;/p&gt;



     &lt;p&gt;关闭selinux和防火墙 （过于简单就不写了） &lt;/p&gt;



     &lt;p&gt;修改内核参数：&lt;/p&gt;



     &lt;p&gt;# cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt; EOF&lt;/p&gt;



     &lt;p&gt;net.bridge.bridge-nf-call-ip6tables = 1&lt;/p&gt;



     &lt;p&gt;net.bridge.bridge-nf-call-iptables = 1&lt;/p&gt;



     &lt;p&gt;net.ipv4.ip_forward = 1&lt;/p&gt;



     &lt;p&gt;vm.max_map_count = 262144EOF&lt;/p&gt;



     &lt;p&gt;# modprobe br_netfilter &amp;amp;&amp;amp; sysctl -p /etc/sysctl.conf&lt;/p&gt;



     &lt;p&gt;设置rp_filter的值 &lt;/p&gt;



     &lt;p&gt;kubernetes集群如果使用的是calico网络插件，那么要求下面两个内核参数为0或者1，ubuntu20.04默认是2 &lt;/p&gt;



     &lt;p&gt;# vim /etc/sysctl.d/10-network-security.conf &lt;/p&gt;



     &lt;p&gt;net.ipv4.conf.default.rp_filter=1 &lt;/p&gt;



     &lt;p&gt;net.ipv4.conf.all.rp_filter=1 &lt;/p&gt;



     &lt;p&gt;# sysctl –system&lt;/p&gt;



     &lt;pre&gt;安装docker-ce
# apt remove docker docker-engine docker.io containerd runc
# apt-get install ca-certificates \curl gnupg lsb-release
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# echo \
  &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
# apt update
# apt install docker-ce docker-ce-cli containerd.io
# systemctl enable docker
# mkdir /etc/docker/
# vim /etc/docker/daemon.json
{
        &amp;quot;exec-opts&amp;quot;:[&amp;quot;native.cgroupdriver=systemd&amp;quot;]
}
# systemctl restart docker&lt;/pre&gt;



     &lt;pre&gt;安装kubernetes 1.22
# apt install ca-certificates curl software-properties-common apt-transport-https curl
# curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# cat &amp;gt;&amp;gt; /etc/apt/sources.list.d/kubernetes.list &amp;lt;&amp;lt;EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# apt update &amp;amp;&amp;amp; apt install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl    # 如果需要锁定版本使用这个命令
# apt-mark unhold kubelet kubeadm kubectl  # 解锁
# kubeadm version
kubeadm version: &amp;amp;version.Info{Major:&amp;quot;1&amp;quot;, Minor:&amp;quot;22&amp;quot;, GitVersion:&amp;quot;v1.22.2&amp;quot;, GitCommit:&amp;quot;8b5a19147530eaac9476b0ab82980b4088bbc1b2&amp;quot;, GitTreeState:&amp;quot;clean&amp;quot;, BuildDate:&amp;quot;2021-09-15T21:37:34Z&amp;quot;, GoVersion:&amp;quot;go1.16.8&amp;quot;, Compiler:&amp;quot;gc&amp;quot;, Platform:&amp;quot;linux/amd64&amp;quot;}
# systemctl enable kubelet
&lt;/pre&gt;



     &lt;pre&gt;修改配置文件   # 只在master节点操作
# kubeadm config print init-defaults &amp;gt; kubeadm.yaml
# vim kubeadm.yaml       修改&amp;amp;新增4处
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 172.19.82.170   # 修改为master节点IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers   # 修改为阿里云源站
kind: ClusterConfiguration
kubernetesVersion: 1.22.2       # 修改为正确的版本号，原来是1.22.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16     # 新增
  serviceSubnet: 10.96.0.0/12
scheduler: {}&lt;/pre&gt;



     &lt;pre&gt;查看需要的镜像   # 只在master节点操作
# kubeadm config images list --config kubeadm.yaml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
registry.aliyuncs.com/google_containers/kube-proxy:v1.22.2
registry.aliyuncs.com/google_containers/pause:3.5
registry.aliyuncs.com/google_containers/etcd:3.5.0-0
registry.aliyuncs.com/google_containers/coredns:v1.8.4
&lt;/pre&gt;



     &lt;img alt="" height="163" src="http://www.luyouli.com/wp-content/uploads/2021/10/1.png" width="725"&gt;&lt;/img&gt;



     &lt;pre&gt;拉取镜像
# kubeadm config images pull --config kubeadm.yaml
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.5
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.0-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.8.4&lt;/pre&gt;



     &lt;img alt="" height="155" src="https://www.luyouli.com/wp-content/uploads/2021/10/2.png" width="951"&gt;&lt;/img&gt;
&lt;/div&gt;&lt;/div&gt;



   &lt;pre&gt;初始化集群    # 只在master节点操作
# kubeadm init --config kubeadm.yaml
[init] Using Kubernetes version: v1.22.2
[preflight] Running pre-flight checks
        [WARNING Hostname]: hostname &amp;quot;node&amp;quot; could not be reached
        [WARNING Hostname]: hostname &amp;quot;node&amp;quot;: lookup node on 127.0.0.53:53: server 
························
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
·····················
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes
NAME   STATUS     ROLES                  AGE   VERSION
node   NotReady   control-plane,master   34m   v1.22.2

添加slave节点到master集群中   # 在两个slave节点执行
# kubeadm join 172.19.82.170:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:7600dfe96c4aed7cf86a4d43c8ab1653b642f0xxxxxxxxxxxxxxxxxxxxx &lt;/pre&gt;



   &lt;pre&gt;# kubectl get nodes   # 在master节点查看
NAME     STATUS     ROLES                  AGE     VERSION
node     NotReady   control-plane,master   39m     v1.22.2
slave1   NotReady   &amp;lt;none&amp;gt;                 2m50s   v1.22.2
slave2   NotReady   &amp;lt;none&amp;gt;                 113s    v1.22.2
&lt;/pre&gt;



   &lt;pre&gt;安装flannel插件
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# vim kube-flannel.yml
在下面增加配置，指定具体的网卡，尤其是在多网卡环境，默认是第一块网卡
args:
        - --ip-masq
        - --kube-subnet-mgr
resources:
变为
args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=ens3    # 指定具体的网卡
resources:
# kubectl create -f kube-flannel.yml 
&lt;/pre&gt;



   &lt;pre&gt;# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
node     Ready    control-plane,master   63m   v1.22.2
slave1   Ready    &amp;lt;none&amp;gt;                 26m   v1.22.2
slave2   Ready    &amp;lt;none&amp;gt;                 25m   v1.22.2

&lt;/pre&gt;



   &lt;img alt="" height="106" src="https://www.luyouli.com/wp-content/uploads/2021/10/3.png" width="1451"&gt;&lt;/img&gt;



   &lt;p&gt;这样环境就OK了&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>kubernetes Ubuntu</category>
      <guid isPermaLink="true">https://itindex.net/detail/61865-ubuntu-kubernetes-%E9%9B%86%E7%BE%A4</guid>
      <pubDate>Sun, 31 Oct 2021 19:46:07 CST</pubDate>
    </item>
    <item>
      <title>用了 5 年的 Ubuntu 16.04 桌面系统来谈谈感受</title>
      <link>https://itindex.net/detail/61673-ubuntu-%E6%A1%8C%E9%9D%A2-%E7%B3%BB%E7%BB%9F</link>
      <description>&lt;p&gt;自从从事编程之后一直都是用的 Ubuntu 16.04 ，为什么偏爱 16.04 是因为个人感觉 unity 这个桌面挺好用，可惜后面版本都改了 gnome，无爱，所以一直没更新，而且自己用着也挺好。虽然发行版版本比较老，但是内核版本我已经升级到了 5.10 。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="https://i.bmp.ovh/imgs/2021/08/c9336010bc899bae.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;h2&gt;1.硬件配置&lt;/h2&gt;
 &lt;ul&gt;
  &lt;li&gt;i7-8700k &lt;/li&gt;
  &lt;li&gt;240GB 三星 970 SSD &lt;/li&gt;
  &lt;li&gt;16GB 内存&lt;/li&gt;
  &lt;li&gt;4T 机械盘&lt;/li&gt;
  &lt;li&gt;LG 4k 显示器&lt;/li&gt;
&lt;/ul&gt;
 &lt;p&gt;之前有一个 1070ti 独显，前端时间显卡涨价，由于我不咋玩游戏，就给卖了回血了，等矿难再换个。其实吧，Intel 的集显在 Linux 下表现丝毫不输几千块的独显，我这个 CPU 集显是 UHD620，支持 4k 分辨率毫无压力（板得有 DP 口）。&lt;/p&gt;
 &lt;h2&gt;2.高分屏&lt;/h2&gt;
 &lt;p&gt;个人强烈推荐 4k 屏幕，能够极大提高体验，众所周知，苹果笔记本之所以显示细腻，是因为其屏幕分辨率真不低，笔记本大约是 3k，IMac 直接上的 5k 分辨率。&lt;/p&gt;
 &lt;p&gt;个人感觉 Linux 下的 4k 渲染体验仅次于 Mac OS，贴一张 200%缩放下 v 站的截图给大家看看&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="https://i.bmp.ovh/imgs/2021/08/aa326112cc411224.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;唯一比较麻烦的是很多应用的支持并不是太友好，不过大部分都可以搞定，关于缩放倍率这块大家可以参考我之前的文章:   &lt;a href="https://wangbjun.site/2019/linux/ubuntu-4k-scale.html" rel="nofollow"&gt;Ubuntu 4K 显示器缩放设置&lt;/a&gt;&lt;/p&gt;
 &lt;h2&gt;3.常见应用&lt;/h2&gt;
 &lt;ul&gt;
  &lt;li&gt;开发工具，其实 Linux 最不缺开发工具了，该有的都有，比如 vscode 、atom，IDE 的话直接 jetbrains 全家桶就行了。&lt;/li&gt;
  &lt;li&gt;通讯这块，可以用 deepin 微信、deepinQQ，基本上问题不大，可用性很高，这块得感谢 deepin&lt;/li&gt;
  &lt;li&gt;下载这块，BT 下载可以用 qbittorrent，百度网盘有官方客户端，但是 16.04 安装不了。迅雷的话，我是用 vbox 整个了 win7 虚拟机，映射磁盘，直接下载到宿主机里面，也不麻烦。&lt;/li&gt;
  &lt;li&gt;浏览器，太多了，推荐 chrome，也有 Firefox，Edge （ u1s1，这个速度是真快），甚至 360 也有 Linux 版本。。。&lt;/li&gt;
  &lt;li&gt;文档处理，WPS 最良心，无广告弹窗&lt;/li&gt;
  &lt;li&gt;输入法，我主要用搜狗，无广告弹窗，但是有些应用下光标不跟随，比如 jetbrains 家的 IDE，我是有点醉，虽然影响不大，但是官方一直不解决。&lt;/li&gt;
  &lt;li&gt;视频播放器，开源的 smplayer，其实底层是 mpv，还有 vlc 都可以用&lt;/li&gt;
  &lt;li&gt;直播录屏工具，鼎鼎大名的 obs，开源跨平台的，很多知名主播都在用&lt;/li&gt;
  &lt;li&gt;音乐，本地播放器倒是挺多，但是国内真正可用的软件，目前只有网易云音乐支持，其它的可以用网页版&lt;/li&gt;
  &lt;li&gt;截图，flameshot，这个开源的工具很强大，比自带的好使&lt;/li&gt;
  &lt;li&gt;游戏，俗话说用 Linux 还玩啥游戏，我都是双系统随时切换 Windows，真要玩也有，下载一个 steam 就行，最起码 dota2 跑的很顺畅。&lt;/li&gt;
&lt;/ul&gt;
 &lt;p&gt;其它比较少见的就不说了，比如一些视频编辑软件 kdenlive 、达芬奇、Blender 等等，专业性太强，俺不会，只是安装过，可惜 adobe 全家桶并不支持 Linux 。&lt;/p&gt;
 &lt;p&gt;其实平时用的最多的还是浏览器，chrome 对 Linux 的支持是相当好，所以这点保证了体验不会很差，其它软件偶尔用，虽然平时也会遇到一些小问题，但是只要懂点手花点功夫都能解决，可以参考一下本人博客里面积累的一些文章：   &lt;a href="https://wangbjun.site/tags/Ubuntu" rel="nofollow"&gt;https://wangbjun.site/tags/Ubuntu&lt;/a&gt;&lt;/p&gt;

	&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61673-ubuntu-%E6%A1%8C%E9%9D%A2-%E7%B3%BB%E7%BB%9F</guid>
      <pubDate>Mon, 09 Aug 2021 22:37:52 CST</pubDate>
    </item>
    <item>
      <title>基于 VirtualBox 与 Ubuntu 16 搭建 Kubernetes 集群</title>
      <link>https://itindex.net/detail/61594-virtualbox-ubuntu-kubernetes</link>
      <description>&lt;br /&gt;【编者的话】这篇文章记录了我在一台机器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整个过程，包括其中遇到的一些问题以及解决办法。 &lt;br /&gt;
 &lt;br /&gt; &lt;h3&gt;关于 Kubernetes&lt;/h3&gt;下面是一段来自维基百科的关于 Kubernetes 的解释： &lt;br /&gt;
 &lt;br /&gt; &lt;blockquote&gt;  &lt;br /&gt;Kubernetes（常简称为 K8s）是用于自动部署、扩展和管理「容器化（containerized）应用程序」的开源系统。该系统由 Google 设计并捐赠给 Cloud Native Computing Foundation（今属 Linux 基金会）来使用。  &lt;br /&gt;
  它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具，包括 Docker 等。&lt;/blockquote&gt;Kubernetes 可以为我们提供  &lt;code&gt;服务发现和负载均衡&lt;/code&gt;、 &lt;code&gt;存储编排&lt;/code&gt;、 &lt;code&gt;自动部署和回滚&lt;/code&gt;、 &lt;code&gt;自动完成装箱计算&lt;/code&gt;、 &lt;code&gt;自我修复&lt;/code&gt;和 &lt;code&gt;密钥与配置管理&lt;/code&gt;的能力。 &lt;br /&gt;
 &lt;h3&gt;基础环境准备&lt;/h3&gt; &lt;h3&gt;安装 VirtualBox&lt;/h3&gt;VirtualBox 是一种功能强大的虚拟机软件，而且是开源免费的，下载地址： &lt;a href="https://www.virtualbox.org/wiki/Downloads" rel="nofollow" target="_blank"&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt;，安装 VirtualBox 非常简单，这里我就不赘述了。 &lt;br /&gt;
 &lt;h4&gt;下载 Ubuntu 16 系统镜像&lt;/h4&gt;这里我选择了 Ubuntu 16 作为系统镜像，当然你也可以使用其他系统，比如 CentOS 等，Ubuntu 16 的下载地址： &lt;a href="https://releases.ubuntu.com/16.04/" rel="nofollow" target="_blank"&gt;https://releases.ubuntu.com/16.04/&lt;/a&gt;。 &lt;br /&gt;
 &lt;h4&gt;虚拟机 x3&lt;/h4&gt;安装好了 VirtualBox，下载了 Ubuntu 16 的镜像后，我们首先需要搭建三台 Ubuntu 16 的虚拟机。这个新建虚拟机的过程也是比较简单的，一步一步往下走就可以了。新建完成后，我们需要对每台虚拟机进行相应的配置，配置时使用的用户应该是  &lt;code&gt;root&lt;/code&gt; 用户。 &lt;br /&gt;
 &lt;br /&gt; &lt;strong&gt;虚拟机 IP&lt;/strong&gt; &lt;br /&gt;
 &lt;br /&gt;由于我们使用的是虚拟机，我们会给每台虚拟机配置网卡，让每台虚拟机都可以上网的，这里有两种方式： &lt;br /&gt;
 &lt;ol&gt;  &lt;li&gt;使用   &lt;code&gt;桥接网卡&lt;/code&gt;，每台虚拟机的 IP 将会是宿主机网段的，支持虚拟机上网&lt;/li&gt;  &lt;li&gt;使用   &lt;code&gt;NAT 网络&lt;/code&gt; + 端口转发，网段自行设置，支持虚拟机上网&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;
 &lt;br /&gt;大家可以使用其中任意一种方式给虚拟机配置网卡，从而让虚拟机可以上网。 &lt;br /&gt;
 &lt;br /&gt;需要注意的是， &lt;strong&gt;在集群搭建完成后，集群中的每个节点的 IP 要求保持不变，否则节点需要重新加入。&lt;/strong&gt; &lt;br /&gt;
 &lt;br /&gt;简单的方式就是让虚拟机不关机，而是进入睡眠状态，下次只需唤醒即可。 &lt;br /&gt;
 &lt;br /&gt;在集群中，我们使用的是内网地址，可以通过   &lt;code&gt;ifconfig&lt;/code&gt;  或者   &lt;code&gt;ip addr&lt;/code&gt;  找到每台虚拟机对应的内网地址： &lt;br /&gt;
 &lt;pre&gt;&amp;gt; ifconfig  &lt;br /&gt;
  &lt;br /&gt;
enp0s3    Link encap:Ethernet  HWaddr 08:00:27:6f:23:2a    &lt;br /&gt;
      inet addr:10.0.2.4  Bcast:10.0.2.255  Mask:255.255.255.0  &lt;br /&gt;
      inet6 addr: fe80::a00:27ff:fe6f:232a/64 Scope:Link  &lt;br /&gt;
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  &lt;br /&gt;
      RX packets:3277016 errors:0 dropped:0 overruns:0 frame:0  &lt;br /&gt;
      TX packets:3385793 errors:0 dropped:0 overruns:0 carrier:0  &lt;br /&gt;
      collisions:0 txqueuelen:1000   &lt;br /&gt;
      RX bytes:1084480916 (1.0 GB)  TX bytes:2079122979 (2.0 GB)  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
这台虚拟机（master）的地址就是  &lt;code&gt;10.0.2.4&lt;/code&gt;。 &lt;br /&gt;
 &lt;br /&gt; &lt;strong&gt;配置主机名&lt;/strong&gt; &lt;br /&gt;
 &lt;br /&gt;Kubernetes 的节点名称是由主机名决定的，所以我们可以分别设置三台虚拟机的主机名为  &lt;code&gt;master&lt;/code&gt;、 &lt;code&gt;node1&lt;/code&gt; 和  &lt;code&gt;node2&lt;/code&gt;，通过修改  &lt;code&gt;/etc/hosts&lt;/code&gt; 文件来修改主机名，需要重启虚拟机： &lt;br /&gt;
 &lt;pre&gt;# /etc/hosts  &lt;br /&gt;
10.0.2.4 master  &lt;br /&gt;
10.0.2.5 node1  &lt;br /&gt;
10.0.2.6 node2  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;br /&gt; &lt;strong&gt;SSH 无密连接&lt;/strong&gt; &lt;br /&gt;
 &lt;br /&gt;在虚拟机运行起来后，我们要做的第一件事就是要连通这三台虚拟机，即配置 SSH 无密连接。 &lt;br /&gt;
 &lt;br /&gt;首先在其中的一台虚拟机上生成 SSH 的公私钥： &lt;br /&gt;
 &lt;pre&gt;ssh-keygen -t rsa -C &amp;apos;k8scat@gmail.com&amp;apos; -f ~/.ssh/id_rsa -q -N &amp;apos;&amp;apos;  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;br /&gt;关于  &lt;code&gt;ssh-keygen&lt;/code&gt; 的参数说明： &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;code&gt;-t rsa&lt;/code&gt; 指定加密算法为    &lt;code&gt;RSA&lt;/code&gt;  &lt;/li&gt;  &lt;li&gt;   &lt;code&gt;-C &amp;apos;k8scat@gmail.com&amp;apos;&lt;/code&gt; 用于提供一个备注，表明私钥的生成者  &lt;/li&gt;  &lt;li&gt;   &lt;code&gt;-f ~/.ssh/id_rsa&lt;/code&gt; 指定私钥生成的位置  &lt;/li&gt;  &lt;li&gt;   &lt;code&gt;-q -N &amp;apos;&amp;apos;&lt;/code&gt; 表示不对私钥加密码，以及使用静默的方式&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;
 &lt;br /&gt;将公私钥分发给另外两台虚拟机，并在三台虚拟机上都将公钥（ &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt;）的内容写进  &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; 文件中，同时设置  &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; 文件的权限为  &lt;code&gt;400&lt;/code&gt;： &lt;br /&gt;
 &lt;pre&gt;cat ~/.ssh/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys  &lt;br /&gt;
chmod 400 ~/.ssh/authorized_keys  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
配置完成后，我们将可以通过以下方式在其中一个虚拟机上连接另一台虚拟机了： &lt;br /&gt;
 &lt;pre&gt;# 在 master 节点上  &lt;br /&gt;
ssh root@node1  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h3&gt;Kubernetes 集群搭建&lt;/h3&gt;在弄好三台虚拟机后，我们便可以开始搭建一个拥有三个节点的 Kubernetes 的集群了。 &lt;br /&gt;
 &lt;h4&gt;安装 Docker&lt;/h4&gt; &lt;pre&gt;apt-get update -y  &lt;br /&gt;
apt-get install -y \  &lt;br /&gt;
apt-transport-https \  &lt;br /&gt;
ca-certificates \  &lt;br /&gt;
curl \  &lt;br /&gt;
gnupg \  &lt;br /&gt;
lsb-release  &lt;br /&gt;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  &lt;br /&gt;
echo \  &lt;br /&gt;
&amp;quot;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  &lt;br /&gt;
$(lsb_release -cs) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null  &lt;br /&gt;
  &lt;br /&gt;
# INSTALL DOCKER ENGINE  &lt;br /&gt;
apt-get update -y  &lt;br /&gt;
apt-get install -y docker-ce docker-ce-cli containerd.io  &lt;br /&gt;
  &lt;br /&gt;
# Configure Docker to start on boot  &lt;br /&gt;
systemctl enable docker.service  &lt;br /&gt;
systemctl enable containerd.service  &lt;br /&gt;
  &lt;br /&gt;
# Start Docker  &lt;br /&gt;
systemctl start docker  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;安装 kubeadm、kubelet 和 kubectl&lt;/h4&gt;这里使用的是阿里云的镜像源： &lt;br /&gt;
 &lt;pre&gt;# 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包  &lt;br /&gt;
apt-get update -y  &lt;br /&gt;
apt-get install -y apt-transport-https ca-certificates curl  &lt;br /&gt;
  &lt;br /&gt;
# 下载 Google Cloud 公开签名秘钥  &lt;br /&gt;
# curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg  &lt;br /&gt;
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -  &lt;br /&gt;
  &lt;br /&gt;
# 添加 Kubernetes apt 仓库  &lt;br /&gt;
# echo &amp;quot;deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main&amp;quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list  &lt;br /&gt;
echo &amp;quot;deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main&amp;quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list  &lt;br /&gt;
  &lt;br /&gt;
# 更新 apt 包索引，安装 kubelet、kubeadm 和 kubectl，并锁定其版本  &lt;br /&gt;
apt-get update -y  &lt;br /&gt;
apt-get install -y kubelet kubeadm kubectl  &lt;br /&gt;
apt-mark hold kubelet kubeadm kubectl  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;关闭 SWAP&lt;/h4&gt;编辑  &lt;code&gt;/etc/fstab&lt;/code&gt; 文件并注释掉  &lt;code&gt;swap&lt;/code&gt; 分区的配置： &lt;br /&gt;
 &lt;pre&gt;#/dev/mapper/master--vg-swap_1 none            swap    sw              0       0  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;预先下载镜像&lt;/h4&gt;获取  &lt;code&gt;kubeadm init&lt;/code&gt; 需要使用到的镜像列表： &lt;br /&gt;
 &lt;pre&gt;&amp;gt; kubeadm config images list  &lt;br /&gt;
  &lt;br /&gt;
k8s.gcr.io/kube-apiserver:v1.21.1  &lt;br /&gt;
k8s.gcr.io/kube-controller-manager:v1.21.1  &lt;br /&gt;
k8s.gcr.io/kube-scheduler:v1.21.1  &lt;br /&gt;
k8s.gcr.io/kube-proxy:v1.21.1  &lt;br /&gt;
k8s.gcr.io/pause:3.4.1  &lt;br /&gt;
k8s.gcr.io/etcd:3.4.13-0  &lt;br /&gt;
k8s.gcr.io/coredns/coredns:v1.8.0  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
Kubernetes 的镜像源对于国内用户是可望而不可即的，但我们可以先拉到国内的镜像仓或者可以使用的镜像仓，比如阿里云的容器镜像服务 ACR 和 Docker 的官方镜像仓 DockerHub。 &lt;br /&gt;
 &lt;br /&gt;我们可以新建一个 GitHub 代码仓，里面只有一个 Dockerfile，其内容如下： &lt;br /&gt;
 &lt;pre&gt;FROM k8s.gcr.io/kube-apiserver:v1.21.0  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
然后在阿里云的容器镜像服务 ACR 中新建一个镜像，并关联这个 GitHub 代码仓，构建出来的镜像就是我们要的 Kubernetes 镜像，比如上面的   &lt;code&gt;k8s.gcr.io/kube-apiserver:v1.21.1&lt;/code&gt;，但在使用的时候需要重新给镜像打标签。 &lt;br /&gt;
 &lt;br /&gt;在 ACR 中构建好了所有需要的镜像后，使用下面这个脚本可以快速处理给镜像打标签的任务： &lt;br /&gt;
 &lt;pre&gt;# Pull images from aliyun registry  &lt;br /&gt;
kubeadm config images list | sed -e &amp;apos;s/^/docker pull /g&amp;apos; -e &amp;apos;s#k8s.gcr.io#registry.cn-shenzhen.aliyuncs.com/k8scat#g&amp;apos; -e &amp;apos;s#/coredns/coredns#/coredns#g&amp;apos; | sh -x  &lt;br /&gt;
  &lt;br /&gt;
# Tag images  &lt;br /&gt;
docker images | grep k8scat | awk &amp;apos;{print &amp;quot;docker tag&amp;quot;,$1&amp;quot;:&amp;quot;$2,$1&amp;quot;:&amp;quot;$2}&amp;apos; | sed -e &amp;apos;s#registry.cn-shenzhen.aliyuncs.com/k8scat#k8s.gcr.io#2&amp;apos; | sh -x  &lt;br /&gt;
docker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0  &lt;br /&gt;
  &lt;br /&gt;
# Remove images  &lt;br /&gt;
docker images | grep k8scat | awk &amp;apos;{print &amp;quot;docker rmi&amp;quot;,$1&amp;quot;:&amp;quot;$2}&amp;apos; | sh -x  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;初始化 master 节点&lt;/h4&gt; &lt;code&gt;10.0.2.4&lt;/code&gt;  是 master 节点的 IP 地址，设置 Pod 网段为  &lt;code&gt;192.168.16.0/20&lt;/code&gt;： &lt;br /&gt;
 &lt;pre&gt;&amp;gt; kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.16.0/20  &lt;br /&gt;
  &lt;br /&gt;
kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \  &lt;br /&gt;
--discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;加入 node 节点&lt;/h4&gt; &lt;pre&gt;kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \  &lt;br /&gt;
--discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;分发 kubectl 配置文件&lt;/h4&gt; &lt;pre&gt;scp master:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf  &lt;br /&gt;
echo &amp;apos;export KUBECONFIG=&amp;quot;/etc/kubernetes/admin.conf&amp;quot;&amp;apos; &amp;gt;&amp;gt; /etc/profile  &lt;br /&gt;
source /etc/profile  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;h4&gt;安装网络插件&lt;/h4&gt;这里我们使用的是  &lt;code&gt;Weave Net&lt;/code&gt;： &lt;br /&gt;
 &lt;pre&gt;# curl -L &amp;quot;https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d &amp;apos;\n&amp;apos;)&amp;quot; &amp;gt; weave-net.yaml  &lt;br /&gt;
  &lt;br /&gt;
# With IPALLOC_RANGE  &lt;br /&gt;
kubectl apply -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml  &lt;br /&gt;
&lt;/pre&gt; &lt;br /&gt;
 &lt;br /&gt;原文链接： &lt;a href="https://juejin.cn/post/6970710333027516423" rel="nofollow" target="_blank"&gt;https://juejin.cn/post/6970710333027516423&lt;/a&gt;
                                
                                                            &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61594-virtualbox-ubuntu-kubernetes</guid>
      <pubDate>Mon, 05 Jul 2021 15:36:03 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu下使用mail命令发送邮件 — notes 0.0.1 文档</title>
      <link>https://itindex.net/detail/61593-ubuntu-mail-%E5%91%BD%E4%BB%A4</link>
      <description>&lt;div&gt;  &lt;h2&gt;安装heirloom-mailx   &lt;a href="https://notes-by-yangjinjie.readthedocs.io/zh_CN/latest/os/ubuntu-debian/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8mail%E5%91%BD%E4%BB%A4%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.html#heirloom-mailx" title="&amp;#27704;&amp;#20037;&amp;#38142;&amp;#25509;&amp;#33267;&amp;#26631;&amp;#39064;"&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt;mail命令在Ubuntu下是需要安装的&lt;/p&gt;  &lt;div&gt;   &lt;div&gt;    &lt;pre&gt;sudo apt-get install heirloom-mailx
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;  &lt;h2&gt;配置   &lt;a href="https://notes-by-yangjinjie.readthedocs.io/zh_CN/latest/os/ubuntu-debian/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8mail%E5%91%BD%E4%BB%A4%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.html#id1" title="&amp;#27704;&amp;#20037;&amp;#38142;&amp;#25509;&amp;#33267;&amp;#26631;&amp;#39064;"&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt;修改如下文件&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ubuntu     &lt;code&gt;/etc/nail.rc或者/etc/s-nail.rc&lt;/code&gt;,具体哪个文件,安装之后查看一下即可&lt;/li&gt;   &lt;li&gt;CentOS     &lt;code&gt;/etc/mail.rc&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div&gt;   &lt;div&gt;    &lt;pre&gt;#...
set from=brave0517@163.com
set smtp=smtp.163.com
set smtp-auth-user=brave0517@163.com
set smtp-auth-password=xxxx
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;配置完成之后就可以使用mail发送邮件了&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;h2&gt;使用mail   &lt;a href="https://notes-by-yangjinjie.readthedocs.io/zh_CN/latest/os/ubuntu-debian/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8mail%E5%91%BD%E4%BB%A4%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.html#mail" title="&amp;#27704;&amp;#20037;&amp;#38142;&amp;#25509;&amp;#33267;&amp;#26631;&amp;#39064;"&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;ol&gt;   &lt;li&gt;    &lt;p&gt;交互形式发送邮件&lt;/p&gt;    &lt;p&gt;mail + 邮箱地址,回车 -&amp;gt; 填写主题 -&amp;gt; 填写内容 -&amp;gt; ctrl + d 结束输入 -&amp;gt; cc代表抄送，回车完成发送&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;使用管道发送&lt;/p&gt;    &lt;p&gt;echo “邮件内容” | mail -s “主题” 邮箱地址&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;读取文件发送&lt;/p&gt;    &lt;p&gt;mail -s “主题” “邮箱地址” &amp;lt; “path/filename”&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61593-ubuntu-mail-%E5%91%BD%E4%BB%A4</guid>
      <pubDate>Mon, 05 Jul 2021 18:57:24 CST</pubDate>
    </item>
    <item>
      <title>从零开始在ubuntu上安装和使用k8s集群及报错解决</title>
      <link>https://itindex.net/detail/60372-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B-ubuntu-k8s</link>
      <description>&lt;div&gt;
  &lt;p&gt;这几天在学习K8S的安装和使用，在此记录一下&lt;/p&gt;
  &lt;p&gt;此文参考了视频教程：&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;
    &lt;a href="https://www.bilibili.com/video/av57580105"&gt;两小时Kubernetes(K8S)从懵圈到熟练——大型分布式集群环境捷径部署搭建_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili&lt;/a&gt;    &lt;br /&gt;镜像+讲义+安装包，链接:https://pan.baidu.com/s/1qO697oBuR7TwQ2J8boI3EA 提取码:4mvs&lt;/li&gt;
   &lt;li&gt;
    &lt;a href="https://www.bilibili.com/video/av49783277"&gt;1 天入门 Kubernetes/K8S_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili&lt;/a&gt;    &lt;br /&gt;docker+k8s+jenkins 视频与课件 https://pan.baidu.com/s/1ZUpqnkwp4B4fDExcVLADrg&lt;/li&gt;
&lt;/ul&gt;
  &lt;p&gt;报错解决在文章最后&lt;/p&gt;
  &lt;h2&gt;安装docker&lt;/h2&gt;
  &lt;p&gt;先安装docker:&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository &amp;quot;deb https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable&amp;quot;
apt update &amp;amp;&amp;amp; apt install docker-ce
docker run hello-world&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h2&gt;安装kubernetes&lt;/h2&gt;
  &lt;p&gt;docker成功运行后配置k8s的更新源，推荐阿里云:&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;echo &amp;quot;deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB #对安装包进行签名
sudo gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;关闭虚拟内存&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;sudo swapoff -a #暂时关闭
nano /etc/fstab #永久关闭，注释掉swap那一行，推荐永久关闭&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;安装最新版的k8s：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;apt-get install kubelet kubeadm kubectl kubernetes-cni&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;其中   &lt;code&gt;kubeadm&lt;/code&gt;用于初始化环境，   &lt;code&gt;kubectl&lt;/code&gt;用于操作   &lt;code&gt;kubelet&lt;/code&gt;。 设置开机启动：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;sudo systemctl enable kubelet &amp;amp;&amp;amp; systemctl start kubelet&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;查看   &lt;code&gt;kubectl&lt;/code&gt;版本：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;root@ubuntu:/home/ubuntu# kubectl version
Client Version: version.Info{Major:&amp;quot;1&amp;quot;, Minor:&amp;quot;17&amp;quot;, GitVersion:&amp;quot;v1.17.2&amp;quot;, GitCommit:&amp;quot;59603c6e503c87169aea6106f57b9f242f64df89&amp;quot;, GitTreeState:&amp;quot;clean&amp;quot;, BuildDate:&amp;quot;2020-01-18T23:30:10Z&amp;quot;, GoVersion:&amp;quot;go1.13.5&amp;quot;, Compiler:&amp;quot;gc&amp;quot;, Platform:&amp;quot;linux/amd64&amp;quot;}
The connection to the server localhost:8080 was refused - did you specify the right host or port?&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h2&gt;配置k8s集群&lt;/h2&gt;
  &lt;p&gt;刚刚已经装好一台虚拟机的k8s，现在要配置2台额外的虚拟机，总共3台，形成k8s集群。&lt;/p&gt;
  &lt;p&gt;推荐的做法是直接使用   &lt;code&gt;vmware&lt;/code&gt;自带的克隆功能，这样可以免去重装的烦恼。&lt;/p&gt;
  &lt;p&gt;共3台机器，分别为 master, node1, node2.&lt;/p&gt;
  &lt;h3&gt;配置虚拟机网络&lt;/h3&gt;
  &lt;p&gt;在   &lt;code&gt;/etc/hostname&lt;/code&gt;中配置主节点为master,node1为 node1,node2为 node2&lt;/p&gt;
  &lt;p&gt;配置每台机器的   &lt;code&gt;/etc/netplan/50-cloud-init.yaml&lt;/code&gt;，把DHCP的IP改为固定IP：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;network:
    ethernets:
        ens33:
            addresses: [192.168.32.132/24]
            dhcp4: false
            gateway4: 192.168.32.2
            nameservers:
                addresses: [192.168.32.2]
            optional: true
    version: 2&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;修改   &lt;code&gt;/etc/hosts&lt;/code&gt;&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;192.168.32.132 master
192.168.32.133 node1
192.168.32.134 node2&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;重启机器后能互相ping表示配置成功：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@node2:~$ ping master
PING master (192.168.32.132) 56(84) bytes of data.
64 bytes from master (192.168.32.132): icmp_seq=1 ttl=64 time=0.837 ms
64 bytes from master (192.168.32.132): icmp_seq=2 ttl=64 time=0.358 ms&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h3&gt;配置Master节点的k8s，并使用 kubeadm 拉取镜像&lt;/h3&gt;
  &lt;p&gt;使用   &lt;code&gt;kubeadm init &lt;/code&gt;进行初始化操作：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;#修改IP地址为master节点的IP地址并配置pod地址
kubeadm init \
--apiserver-advertise-address=192.168.32.132 \
--image-repository registry.aliyuncs.com/google_containers  \
--pod-network-cidr=10.244.0.0/16 &lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;root@master:/home/ubuntu# kubeadm init \
&amp;gt; --apiserver-advertise-address=192.168.32.132 \
&amp;gt; --image-repository registry.aliyuncs.com/google_containers  \
&amp;gt; --pod-network-cidr=10.244.0.0/16 
W0131 07:58:41.470780    4096 version.go:101] could not fetch a Kubernetes version from the internet: unable to get URL &amp;quot;https://dl.k8s.io/release/stable-1.txt&amp;quot;: Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
W0131 07:58:41.470831    4096 version.go:102] falling back to the local client version: v1.17.2
W0131 07:58:41.470908    4096 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0131 07:58:41.470912    4096 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.2
[preflight] Running pre-flight checks
	[WARNING IsDockerSystemdCheck]: detected &amp;quot;cgroupfs&amp;quot; as the Docker cgroup driver. The recommended driver is &amp;quot;systemd&amp;quot;. Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using &amp;apos;kubeadm config images pull&amp;apos;
........................
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run &amp;quot;kubectl apply -f [podnetwork].yaml&amp;quot; with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.32.132:6443 --token uf5mqk.bssr36md2y6b7w7g \
    --discovery-token-ca-cert-hash sha256:fa6e8c828a4480baf8dba2331bcaad4d30ae593024e0a56258cf22fdde3f897a&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$   mkdir -p $HOME/.kube
ubuntu@master:~/k8s$   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
ubuntu@master:~/k8s$   sudo chown $(id -u):$(id -g) $HOME/.kube/config&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;创建系统服务并启动&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;# 启动kubelet 设置为开机自启动
sudo systemctl enable kubelet
# 启动k8s服务程序
sudo systemctl start kubelet
查看启动状况：&lt;/pre&gt;
    &lt;pre&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   7m53s   v1.17.2
ubuntu@master:~/k8s$ kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {&amp;quot;health&amp;quot;:&amp;quot;true&amp;quot;}  &lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;现在只有一个master节点。&lt;/p&gt;
  &lt;h3&gt;配置内部通信 flannel 网络(master和node都要配)&lt;/h3&gt;
  &lt;p&gt;先配置内部通信 flannel 网络：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;确保kubeadm.conf中的podsubnet的地址和kube-flannel.yml中的网络配置一样&lt;/p&gt;
  &lt;p&gt;加载配置文件：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubectl apply -f kube-flannel.yml 
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel configured
clusterrolebinding.rbac.authorization.k8s.io/flannel unchanged
serviceaccount/flannel unchanged
configmap/kube-flannel-cfg configured
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;状态变为ready:&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   39m   v1.17.2&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;如果没变为ready应该是镜像下载失败，手动下载，镜像版本由当前flannel版本决定。&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h3&gt;配置 node节点&lt;/h3&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;sudo systemctl enable kubelet
sudo systemctl start kubelet&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;拷贝配置文件到每个node:&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;scp /etc/kubernetes/admin.conf ubuntu@node1:/home/ubuntu/
scp /etc/kubernetes/admin.conf ubuntu@node2:/home/ubuntu/&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;配置并加入节点，加入中的哈希值是之前配置时生成的。&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;mkdir -p $HOME/.kube
sudo cp -i $HOME/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 192.168.32.132:6443 --token uf5mqk.bssr36md2y6b7w7g \
    --discovery-token-ca-cert-hash sha256:fa6e8c828a4480baf8dba2331bcaad4d30ae593024e0a56258cf22fdde3f897a&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;查看node是否已经加入到k8s集群中(需要等一段时间才能ready):&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   Ready      master   5h8m    v1.17.2
node1    Ready      &amp;lt;none&amp;gt;   3h21m   v1.17.2
node2    Ready      &amp;lt;none&amp;gt;   3h20m   v1.17.2&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;出现报错参考后面的报错解决。&lt;/p&gt;
  &lt;h2&gt;部署ningx应用，测试集群&lt;/h2&gt;
  &lt;p&gt;在Kubernetes集群中创建一个pod，验证是否正常运行：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
ubuntu@master:~$ kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
ubuntu@master:~$ kubectl get pod,svc
NAME                         READY   STATUS              RESTARTS   AGE
pod/nginx-86c57db685-fjvtk   0/1     ContainerCreating   0          17s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        &amp;lt;none&amp;gt;        443/TCP        16h
service/nginx        NodePort    10.106.193.183   &amp;lt;none&amp;gt;        80:32636/TCP   7s&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;部署成功：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ curl 127.0.0.1:32636
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;For online documentation and support please refer to
&amp;lt;a href=&amp;quot;http://nginx.org/&amp;quot;&amp;gt;nginx.org&amp;lt;/a&amp;gt;.&amp;lt;br/&amp;gt;
Commercial support is available at
&amp;lt;a href=&amp;quot;http://nginx.com/&amp;quot;&amp;gt;nginx.com&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Thank you for using nginx.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;快速扩容为3副本：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ kubectl scale deployment nginx --replicas=3
deployment.apps/nginx scaled
ubuntu@master:~$ kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-86c57db685-fjvtk   1/1     Running   0          3m49s
pod/nginx-86c57db685-nhd69   1/1     Running   0          34s
pod/nginx-86c57db685-pq6cz   1/1     Running   0          34s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        &amp;lt;none&amp;gt;        443/TCP        17h
service/nginx        NodePort    10.106.193.183   &amp;lt;none&amp;gt;        80:32636/TCP   3m39s&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h2&gt;通过yaml部署应用&lt;/h2&gt;
  &lt;p&gt;编写配置文件   &lt;code&gt;mysql-rc.yaml&lt;/code&gt;：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;apiVersion: v1
kind: ReplicationController                           
metadata:
  name: mysql                                          
spec:
  replicas: 1                                          #Pod副本的期待数量
  selector:
    app: mysql                                         #符合目标的Pod拥有此标签
  template:                                            #根据此模板创建Pod的副本（实例）
    metadata:
      labels:
        app: mysql                                     #Pod副本拥有的标签，对应RC的Selector
    spec:
      containers:                                      #Pod内容器的定义部分
      - name: mysql                                    #容器的名称
        image: hub.c.163.com/library/mysql              #容器对应的Docker image
        ports: 
        - containerPort: 3306                          #容器应用监听的端口号
        env:                                           #注入容器内的环境变量
        - name: MYSQL_ROOT_PASSWORD 
          value: &amp;quot;123456&amp;quot;&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;加载文件到集群中，等待几分钟等待docker下载完成。&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubectl create -f mysql-rc.yaml
replicationcontroller/mysql created
ubuntu@master:~/k8s$ kubectl get pods
NAME          READY   STATUS              RESTARTS   AGE
mysql-chv9n   0/1     ContainerCreating   0          29s
ubuntu@master:~/k8s$ kubectl get pods 
NAME          READY   STATUS    RESTARTS   AGE
mysql-chv9n   1/1     Running   0          5m56s&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;集群创建完毕。&lt;/p&gt;
  &lt;h2&gt;部署 Dashboard&lt;/h2&gt;
  &lt;p&gt;参考 https://blog.csdn.net/networken/article/details/85607593&lt;/p&gt;
  &lt;p&gt;         https://www.cnblogs.com/life-of-coding/p/11794993.html&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;暴露端口，修改   &lt;code&gt;type: ClusterIP&lt;/code&gt;-&amp;gt;   &lt;code&gt;type: NodePort &lt;/code&gt;&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;kubectl -n kube-system edit service kubernetes-dashboard&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;查看开发的端口：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ kubectl -n kube-system get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.110.2.129   &amp;lt;none&amp;gt;        443:31391/TCP   23m&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;访问网址:   &lt;code&gt;https://master:31391&lt;/code&gt;即可打开面板：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;Kubernetes 仪表板

Kubeconfig
请选择您已配置用来访问集群的 kubeconfig 文件，请浏览配置对多个集群的访问一节，了解更多关于如何配置和使用 kubeconfig 文件的信息

令牌
每个服务帐号都有一条保密字典保存持有者令牌，用来在仪表板登录，请浏览验证一节，了解更多关于如何配置和使用持有者令牌的信息&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;创建service account并绑定默认cluster-admin管理员集群角色：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk &amp;apos;/dashboard-admin/{print $1}&amp;apos;)&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;拿到token登录dashboard.&lt;/p&gt;
  &lt;p&gt;参考：&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;    &lt;a href="https://zhuanlan.zhihu.com/p/46341911"&gt;kubernetes安装（国内环境） - 知乎&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;    &lt;a href="https://www.bilibili.com/video/av57580105"&gt;两小时Kubernetes(K8S)从懵圈到熟练——大型分布式集群环境捷径部署搭建_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;    &lt;a href="https://kubernetes.io/docs/tasks/tools/install-kubectl/"&gt;Install and Set Up kubectl - Kubernetes&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;    &lt;a href="https://www.bilibili.com/video/av49783277"&gt;1 天入门 Kubernetes/K8S_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
  &lt;h2&gt;报错解决&lt;/h2&gt;
  &lt;p&gt;之前参考视频配置的时候报错如下：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubeadm config images pull --config ./kubeadm.conf
W0130 01:11:49.990838   11959 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0130 01:11:49.991229   11959 validation.go:28] Cannot validate kubelet config - no validator is available
failed to pull image &amp;quot;registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.17.0&amp;quot;: output: Error response from daemon: manifest for registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.17.0 not found: manifest unknown: manifest unknown
, error: exit status 1
To see the stack trace of this error execute with --v=5 or higher&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;于是我就换了一种安装的方法，具体操作见文章&lt;/p&gt;
  &lt;p&gt;如果不关闭swap虚拟内存，会报错：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ sudo kubeadm init --config ./kubeadm.conf
[sudo] password for ubuntu: 
W0130 01:32:14.915442   16070 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0130 01:32:14.915742   16070 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.0
[preflight] Running pre-flight checks
	[WARNING IsDockerSystemdCheck]: detected &amp;quot;cgroupfs&amp;quot; as the Docker cgroup driver. The recommended driver is &amp;quot;systemd&amp;quot;. Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;如果使用旧版本的   &lt;code&gt;kube-flannel.yml &lt;/code&gt;会报错，需要下载最新版本：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubectl apply -f kube-flannel.yml 
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
unable to recognize &amp;quot;kube-flannel.yml&amp;quot;: no matches for kind &amp;quot;DaemonSet&amp;quot; in version &amp;quot;extensions/v1beta1&amp;quot;
unable to recognize &amp;quot;kube-flannel.yml&amp;quot;: no matches for kind &amp;quot;DaemonSet&amp;quot; in version &amp;quot;extensions/v1beta1&amp;quot;
unable to recognize &amp;quot;kube-flannel.yml&amp;quot;: no matches for kind &amp;quot;DaemonSet&amp;quot; in version &amp;quot;extensions/v1beta1&amp;quot;
unable to recognize &amp;quot;kube-flannel.yml&amp;quot;: no matches for kind &amp;quot;DaemonSet&amp;quot; in version &amp;quot;extensions/v1beta1&amp;quot;
unable to recognize &amp;quot;kube-flannel.yml&amp;quot;: no matches for kind &amp;quot;DaemonSet&amp;quot; in version &amp;quot;extensions/v1beta1&amp;quot;&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;如果运行程序的用户不对，会报错：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;root@node2:/home/ubuntu# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
ubuntu@node2:~$ kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   Ready      master   147m   v1.17.2
node1    NotReady   &amp;lt;none&amp;gt;   40m    v1.17.2
node2    NotReady   &amp;lt;none&amp;gt;   39m    v1.17.2&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;h3&gt;node节点一直NotReady，报错 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d&lt;/h3&gt;
  &lt;p&gt;如果k8s的node节点一直是   &lt;code&gt;NotReady&lt;/code&gt;状态，那么需要查看日志：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@node1:~/.kube$ journalctl -f -u kubelet
-- Logs begin at Tue 2020-01-28 11:02:32 UTC. --
Jan 30 04:25:10 node1 kubelet[1893]: W0130 04:25:10.042232    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
Jan 30 04:25:11 node1 kubelet[1893]: E0130 04:25:11.637588    1893 remote_runtime.go:105] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Jan 30 04:25:11 node1 kubelet[1893]: E0130 04:25:11.637625    1893 kuberuntime_sandbox.go:68] CreatePodSandbox for pod &amp;quot;kube-proxy-pk22k_kube-system(ad0d231e-e5a5-421d-944d-7f860d1119fa)&amp;quot; failed: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Jan 30 04:25:11 node1 kubelet[1893]: E0130 04:25:11.637685    1893 kuberuntime_manager.go:729] createPodSandbox for pod &amp;quot;kube-proxy-pk22k_kube-system(ad0d231e-e5a5-421d-944d-7f860d1119fa)&amp;quot; failed: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Jan 30 04:25:11 node1 kubelet[1893]: E0130 04:25:11.637737    1893 pod_workers.go:191] Error syncing pod ad0d231e-e5a5-421d-944d-7f860d1119fa (&amp;quot;kube-proxy-pk22k_kube-system(ad0d231e-e5a5-421d-944d-7f860d1119fa)&amp;quot;), skipping: failed to &amp;quot;CreatePodSandbox&amp;quot; for &amp;quot;kube-proxy-pk22k_kube-system(ad0d231e-e5a5-421d-944d-7f860d1119fa)&amp;quot; with CreatePodSandboxError: &amp;quot;CreatePodSandbox for pod \&amp;quot;kube-proxy-pk22k_kube-system(ad0d231e-e5a5-421d-944d-7f860d1119fa)\&amp;quot; failed: rpc error: code = Unknown desc = failed pulling image \&amp;quot;k8s.gcr.io/pause:3.1\&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)&amp;quot;
Jan 30 04:25:12 node1 kubelet[1893]: E0130 04:25:12.608103    1893 aws_credentials.go:77] while getting AWS credentials NoCredentialProviders: no valid providers in chain. Deprecated.
Jan 30 04:25:12 node1 kubelet[1893]:         For verbose messaging see aws.Config.CredentialsChainVerboseErrors
Jan 30 04:25:13 node1 kubelet[1893]: E0130 04:25:13.662938    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jan 30 04:25:15 node1 kubelet[1893]: W0130 04:25:15.043972    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
Jan 30 04:25:18 node1 kubelet[1893]: E0130 04:25:18.671967    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;看报错就可以解决问题了。&lt;/p&gt;
  &lt;p&gt;这里显示的报错是镜像没下载，那么就手动下载。&lt;/p&gt;
  &lt;p&gt;随后又报错如下：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@node1:~$ journalctl -f -u kubelet
-- Logs begin at Tue 2020-01-28 11:02:32 UTC. --
Jan 30 04:32:26 node1 kubelet[1893]: E0130 04:32:26.252152    1893 pod_workers.go:191] Error syncing pod 9e1020f5-06a0-469b-8340-adff61fb2f56 (&amp;quot;kube-flannel-ds-amd64-rcvjv_kube-system(9e1020f5-06a0-469b-8340-adff61fb2f56)&amp;quot;), skipping: failed to &amp;quot;StartContainer&amp;quot; for &amp;quot;install-cni&amp;quot; with ImagePullBackOff: &amp;quot;Back-off pulling image \&amp;quot;quay.io/coreos/flannel:v0.11.0-amd64\&amp;quot;&amp;quot;
Jan 30 04:32:30 node1 kubelet[1893]: E0130 04:32:30.115061    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jan 30 04:32:30 node1 kubelet[1893]: W0130 04:32:30.149915    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
Jan 30 04:32:35 node1 kubelet[1893]: E0130 04:32:35.125483    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jan 30 04:32:35 node1 kubelet[1893]: W0130 04:32:35.150265    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
Jan 30 04:32:39 node1 kubelet[1893]: E0130 04:32:39.251675    1893 pod_workers.go:191] Error syncing pod 9e1020f5-06a0-469b-8340-adff61fb2f56 (&amp;quot;kube-flannel-ds-amd64-rcvjv_kube-system(9e1020f5-06a0-469b-8340-adff61fb2f56)&amp;quot;), skipping: failed to &amp;quot;StartContainer&amp;quot; for &amp;quot;install-cni&amp;quot; with ImagePullBackOff: &amp;quot;Back-off pulling image \&amp;quot;quay.io/coreos/flannel:v0.11.0-amd64\&amp;quot;&amp;quot;
Jan 30 04:32:40 node1 kubelet[1893]: E0130 04:32:40.134950    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jan 30 04:32:40 node1 kubelet[1893]: W0130 04:32:40.151451    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
Jan 30 04:32:45 node1 kubelet[1893]: E0130 04:32:45.145834    1893 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jan 30 04:32:45 node1 kubelet[1893]: W0130 04:32:45.151693    1893 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;报错   &lt;code&gt;Unable to update cni config: no networks found in /etc/cni/net.d&lt;/code&gt;这个报错我也看不出来哪里有问题。&lt;/p&gt;
  &lt;p&gt;随后查看更具体的情况：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;ubuntu@master:~$ kubectl get pods -n kube-system -o wide
NAME                             READY   STATUS     RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-flannel-ds-amd64-gtlwv      1/1     Running    4          4h23m   192.168.32.132   master   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
kube-flannel-ds-amd64-m78z2      0/1     Init:0/1   0          3h13m   192.168.32.134   node2    &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
kube-flannel-ds-amd64-rcvjv      1/1     Running    1          3h13m   192.168.32.133   node1    &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
ubuntu@master:~$ kubectl --namespace kube-system logs kube-flannel-ds-amd64-m78z2
Error from server (BadRequest): container &amp;quot;kube-flannel&amp;quot; in pod &amp;quot;kube-flannel-ds-amd64-m78z2&amp;quot; is waiting to start: PodInitializing
ubuntu@master:~$ kubectl describe pod kube-flannel-ds-amd64-m78z2 --namespace=kube-system
Name:         kube-flannel-ds-amd64-m78z2
Namespace:    kube-system
............................
Events:
  Type     Reason                  Age                     From               Message
  ----     ------                  ----                    ----               -------
  Normal   Scheduled               &amp;lt;unknown&amp;gt;               default-scheduler  Successfully assigned kube-system/kube-flannel-ds-amd64-m78z2 to node2
  Warning  FailedCreatePodSandBox  3h17m (x22 over 3h27m)  kubelet, node2     Failed to create pod sandbox: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  FailedCreatePodSandBox  139m (x63 over 169m)    kubelet, node2     Failed to create pod sandbox: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed                  23m (x3 over 26m)       kubelet, node2     Failed to pull image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;: rpc error: code = Unknown desc = context canceled
  Warning  Failed                  23m (x3 over 26m)       kubelet, node2     Error: ErrImagePull
  Normal   BackOff                 23m (x5 over 26m)       kubelet, node2     Back-off pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;
  Warning  Failed                  23m (x5 over 26m)       kubelet, node2     Error: ImagePullBackOff
  Normal   Pulling                 22m (x4 over 30m)       kubelet, node2     Pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;
  Normal   SandboxChanged          19m                     kubelet, node2     Pod sandbox changed, it will be killed and re-created.
  Normal   Pulling                 18m                     kubelet, node2     Pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;
  Normal   Pulling                 10m                     kubelet, node2     Pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;
  Normal   Pulling                 3m4s                    kubelet, node2     Pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;可以看出问题在于无法拉镜像：   &lt;code&gt;Pulling image &amp;quot;quay.io/coreos/flannel:v0.11.0-amd64&amp;quot;&lt;/code&gt;，手动拉：&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;     &lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64&lt;/pre&gt;
    &lt;pre&gt;     &lt;code&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;问题解决，参考：   &lt;a href="https://www.jianshu.com/p/f53650a85131"&gt;k8s 部署问题解决 - 简书&lt;/a&gt;&lt;/p&gt;
  &lt;h3&gt;拉取k8s需要的镜像&lt;/h3&gt;
  &lt;p&gt;由于官方镜像地址被墙，所以我们需要首先获取所需镜像以及它们的版本。然后从国内镜像站获取。&lt;/p&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;pre&gt;ubuntu@master:~/k8s$ kubeadm config images list --config kubeadm.conf
W0130 01:31:26.536909   15911 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0130 01:31:26.536973   15911 validation.go:28] Cannot validate kubelet config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.0
k8s.gcr.io/kube-controller-manager:v1.17.0
k8s.gcr.io/kube-scheduler:v1.17.0
k8s.gcr.io/kube-proxy:v1.17.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
#下载全部当前版本的k8s所关联的镜像
images=(  # 下面的镜像应该去除&amp;quot;k8s.gcr.io/&amp;quot;的前缀，版本换成上面获取到的版本
kube-apiserver:v1.17.0
kube-controller-manager:v1.17.0
kube-scheduler:v1.17.0
kube-proxy:v1.17.0
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done&lt;/pre&gt;
    &lt;pre&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;div&gt; &lt;/div&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;div&gt;
     &lt;div&gt;      &lt;a href="https://github.com/zhang0peter/blog-comments/issues/89" target="_blank"&gt; &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="https://www.iteye.com/blog/sunbin-2512460#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/60372-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B-ubuntu-k8s</guid>
      <pubDate>Tue, 18 Feb 2020 21:15:43 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu下CPU/GPU模式YOLOv3代码运行-holygao的博客-51CTO博客</title>
      <link>https://itindex.net/detail/59781-ubuntu-cpu-gpu</link>
      <description>&lt;div&gt;    &lt;p&gt;YOLO是近几年物体检测主要算法之一，2018年已发展到YOLOv3，是目前速度最快的物体检测算法，详细内容可查看      &lt;a href="https://pjreddie.com/darknet/yolo/" rel="nofollow"&gt;YOLO主页&lt;/a&gt;。YOLO的主要优势在于基于纯C语言编写的DarkNet，可查看      &lt;a href="https://pjreddie.com/darknet/" rel="nofollow"&gt;DarkNet主页&lt;/a&gt;，不需要其他依赖库，跨平台能力强，运行速度快，这里是      &lt;a href="https://github.com/pjreddie/darknet" rel="nofollow"&gt;下载地址&lt;/a&gt;。有趣的是里边有好几个LICENSE文件，其中LICENSE.fuck的内容是这样的：&lt;/p&gt;    &lt;blockquote&gt;      &lt;pre&gt;        &lt;code&gt;DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
               Version 2, December 2004&lt;/code&gt;&lt;/pre&gt;      &lt;p&gt;Copyright (C) 2004 Sam Hocevar &amp;lt;sam@hocevar.net&amp;gt;&lt;/p&gt;      &lt;p&gt;Everyone is permitted to copy and distribute verbatim or modified        &lt;br /&gt;copies of this license document, and changing it is allowed as long        &lt;br /&gt;as the name is changed.&lt;/p&gt;      &lt;pre&gt;        &lt;code&gt;DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE&lt;/code&gt;&lt;/pre&gt;      &lt;p&gt;TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION&lt;/p&gt;      &lt;ol start="0"&gt;        &lt;li&gt;You just DO WHAT THE FUCK YOU WANT TO.&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;    &lt;p&gt;短短几行字出现了三次“FUCK”，还出现在标题中。这是我第一次见到这样的LICENSE文档，估计是往github上推送时忘了删除吧。      &lt;br /&gt;下面是我运行YOLOv3代码的过程。      &lt;br /&gt;我的运行环境为：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;Ubuntu16.04LTS&lt;/li&gt;      &lt;li&gt;CUDA9.0&lt;/li&gt;      &lt;li&gt;cuDNN7.0.5&lt;/li&gt;      &lt;li&gt;AMD Ryzen 1600&lt;/li&gt;      &lt;li&gt;NVIDIA  GTX1070&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;一. 使用CPU运行&lt;/h2&gt;    &lt;p&gt;这个比较简单，在Ubuntu下载、编译、运行非常方便，按照YOLO主页给的提示执行就可以看到结果。&lt;/p&gt;    &lt;h3&gt;1. 下载&lt;/h3&gt;    &lt;pre&gt;      &lt;code&gt;git clone https://github.com/pjreddie/darknet&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;2. 编译&lt;/h3&gt;    &lt;pre&gt;      &lt;code&gt;cd darknet
make&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;执行完命令可以看到生成了可执行文件darknet和库文件libdarknet.a和libdarknet.so。在Ubuntu下使用makefile文件进行编译非常方便，执行一个命即可，比在Windows安装cygwin和GUI的CMake，使用CMake在界面方式编译要简单得多。&lt;/p&gt;    &lt;h3&gt;3. 下载预训练的权重文件&lt;/h3&gt;    &lt;pre&gt;      &lt;code&gt;wget https://pjreddie.com/media/files/yolov3.weights&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;在Ubuntu中下载速度很慢，要几个小时。我打开了另一台装Windows的电脑，用下载神器迅雷几分钟就下完了，感谢国内下载完这个文件还开着电脑和迅雷的小伙伴们。然后将该文件拷贝至Ubuntu电脑上darknet目录下。&lt;/p&gt;    &lt;h3&gt;4. 运行检测器&lt;/h3&gt;    &lt;pre&gt;      &lt;code&gt;./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这里的“./darknet”表示当前目录下的darknet，这点与Windows的命令行不同。运行完可看到下面的结果，并在darknet目录下生成了检测结果的jpg文件。&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;layer     filters    size              input                output        &lt;br /&gt;0 conv     32  3 x 3 / 1   416 x 416 x   3   -&amp;gt;   416 x 416 x  32  0.299 BFLOPs        &lt;br /&gt;1 conv     64  3 x 3 / 2   416 x 416 x  32   -&amp;gt;   208 x 208 x  64  1.595 BFLOPs        &lt;br /&gt;.......        &lt;br /&gt;105 conv    255  1 x 1 / 1    52 x  52 x 256   -&amp;gt;    52 x  52 x 255  0.353 BFLOPs        &lt;br /&gt;106 detection        &lt;br /&gt;truth_thresh: Using default &amp;apos;1.000000&amp;apos;        &lt;br /&gt;Loading weights from yolov3.weights...Done!        &lt;br /&gt;data/dog.jpg: Predicted in 0.029329 seconds.        &lt;br /&gt;dog: 99%        &lt;br /&gt;truck: 93%        &lt;br /&gt;bicycle: 99%&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;这几步在我的电脑上执行顺利，没有出现问题。&lt;/p&gt;    &lt;h2&gt;二. 使用GPU运行&lt;/h2&gt;    &lt;p&gt;四个步骤相同，区别在于要修改Makefile文件。而且电脑要提前装好CUDA和cuDNN，可参看      &lt;br /&gt;      &lt;a href="https://blog.51cto.com/8764888"&gt;环境配置（近期实测）——Ubuntu16.04+CUDA9.0+tensorflow-gpu填坑记&lt;/a&gt;。 Makefile文件修改如下：      &lt;br /&gt;将&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GPU=0
CUDNN=0
NVCC=nvcc&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;改为&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GPU=1
CUDNN=1
NVCC=/usr/local/cuda-9.0/bin/nvcc #即改为本机CUDA安装地址&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;修改完执行make提示：&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;include/darknet.h:16:23: fatal error: cudnn.h: 没有那个文件或目录        &lt;br /&gt;compilation terminated.        &lt;br /&gt;Makefile:89: recipe for target &amp;apos;obj/gemm.o&amp;apos; failed        &lt;br /&gt;make: *** [obj/gemm.o] Error 1&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;是因为缺乏头文件cudnn.h，需要将其复制。由于需要管理员权限，我使用命令复制。      &lt;br /&gt;进入所在目录～/下载/cuda/include（下载CUDA的默认位置，可能会有不同），运行：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;sudo cp cudnn.h /usr/include&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;然后再darknet目录下执行make，提示&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;/usr/bin/ld: 找不到 -lcudnn        &lt;br /&gt;collect2: error: ld returned 1 exit status        &lt;br /&gt;Makefile:83: recipe for target &amp;apos;libdarknet.so&amp;apos; failed        &lt;br /&gt;make: *** [libdarknet.so] Error 1&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;这是因为缺少库文件libcudnn.so，我使用命令复制。进入所在目录～/下载/cuda/lib64（下载CUDA的默认位置，可能会有不同），打开终端，运行&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;sudo cp libcudnn.so /usr/local/cuda-9.0/lib64&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;再在darknet目录下执行make命令，可以看到，已生成可执行程序darkenet和库libdarknet.o和libdarknet.so。剩余过程同上，最后也可以生成有方框标记概率的jpg文件。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/59781-ubuntu-cpu-gpu</guid>
      <pubDate>Thu, 04 Jul 2019 16:32:53 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu下修改为永久DNS的方法</title>
      <link>https://itindex.net/detail/59606-ubuntu-%E6%B0%B8%E4%B9%85-dns</link>
      <description>安装好Ubuntu之后设置了静态IP地址，再重启后就无法解析域名。想重新设置一下DNS，打开/etc/resolv.conf
 &lt;br /&gt;
 &lt;br /&gt;cat /etc/resolv.conf
 &lt;br /&gt;# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
 &lt;br /&gt;#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
 &lt;br /&gt;
 &lt;br /&gt;内容是一段警告：说这个文件是resolvconf程序动态创建的，不要直接手动编辑，修改将被覆盖。
 &lt;br /&gt;
 &lt;br /&gt;果不其然，修改后重启就失效了，搜索了Ubuntu下设置DNS的相关资料，总结出两个办法：
 &lt;br /&gt;
 &lt;br /&gt;方法一 通过/etc/network/interfaces，在它的最后增加一句：
 &lt;br /&gt;
 &lt;br /&gt;dns-nameservers 8.8.8.8
 &lt;br /&gt;
 &lt;br /&gt;8.8.8.8是Google提供的DNS服务，这里只是举一个例子，你也可以改成电信运营商的DNS。重启后DNS就生效了，这时候再看/etc/resolv.conf，最下面就多了一行：
 &lt;br /&gt;
 &lt;br /&gt;# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
 &lt;br /&gt;#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
 &lt;br /&gt;nameserver 8.8.8.8
 &lt;br /&gt;
 &lt;br /&gt;方法二 通过修改：
 &lt;br /&gt;
 &lt;br /&gt;/etc/resolvconf/resolv.conf.d/base（这个文件默认是空的）
 &lt;br /&gt;
 &lt;br /&gt;在里面插入：
 &lt;br /&gt;nameserver 114.114.114.114
 &lt;br /&gt;
 &lt;br /&gt;如果有多个DNS就一行一个
 &lt;br /&gt;
 &lt;br /&gt;修改好保存，然后执行
 &lt;br /&gt;
 &lt;br /&gt;resolvconf -u
 &lt;br /&gt;
 &lt;br /&gt;再看/etc/resolv.conf，最下面就多了2行：
 &lt;br /&gt;
 &lt;br /&gt;cat /etc/resolv.conf
 &lt;br /&gt;# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
 &lt;br /&gt;#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
 &lt;br /&gt;nameserver 8.8.8.8
 &lt;br /&gt;nameserver 8.8.4.4
 &lt;br /&gt;
 &lt;br /&gt;可以看到我们的设置已经加上了，然后再ping一个域名，当时就可以解析了，无需重启。
 &lt;br /&gt;
 &lt;br /&gt;附：CentOS下修改DNS则容易的多了，直接修改/etc/resolv.conf，内容是：
 &lt;br /&gt;nameserver 8.8.8.8
 &lt;br /&gt;nameserver 8.8.4.4
 &lt;br /&gt;
 &lt;br /&gt;保存就生效了，重启也没问题。
 &lt;br /&gt;
 &lt;br /&gt;原文链接http://blog.csdn.net/todd911/article/details/9251087
 &lt;br /&gt;
 &lt;br /&gt;大部分的方法都是 &lt;strong&gt;第二种方法&lt;/strong&gt;，我这儿试过之后就是不可以，也不知道什么原因，所幸找到了这篇文章，亲测第一种方法有效。
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://xialluyouyue.iteye.com/blog/2441104#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/59606-ubuntu-%E6%B0%B8%E4%B9%85-dns</guid>
      <pubDate>Mon, 20 May 2019 11:14:12 CST</pubDate>
    </item>
    <item>
      <title>失望的MacBook Pro (2016)让部分粉丝转投Ubuntu</title>
      <link>https://itindex.net/detail/56129-%E5%A4%B1%E6%9C%9B-macbook-pro</link>
      <description>苹果上周发布了新款MacBook Pro，硬件性能提升很小，最主要的一个噱头是 Touch Bar，苹果用户对新产品的普遍反应是失望，失望的一个外在表现是他们开始转投苹果的竞争对手，其中一个竞争产品是Ubuntu笔记本。出售Ubuntu笔记本和台式机的网站System76报告突然有大量流量涌入网站购买Ubuntu电脑，流量之大迫使他们扩充服务器。苹果的MacBook Pro只提供了最大16GB内存，而在System76，32GB内存、配置更好的Ubuntu笔记本比MacBook Pro要便宜得多。&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/56129-%E5%A4%B1%E6%9C%9B-macbook-pro</guid>
      <pubDate>Tue, 01 Nov 2016 20:21:12 CST</pubDate>
    </item>
    <item>
      <title>服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS？</title>
      <link>https://itindex.net/detail/50074-%E6%9C%8D%E5%8A%A1%E5%99%A8-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F-%E9%80%89%E6%8B%A9</link>
      <description>早期，我们使用 Debian 作为服务器软件，后来转向了CentOS，主要原因如下： &lt;br /&gt; &lt;br /&gt;1、CentOS/RHEL的生命周期是7年，基本上可以覆盖硬件的生命周期，也就意味着一个新硬件安装以后，不用再次安装操作系统。要知道重新折腾一个生产机是很麻烦而且有风险的事情。 &lt;br /&gt; &lt;br /&gt;[2012.2.1]今天刚刚收到红帽子的通知邮件，RedHat 5, RedHat 6的生命周期，延长到10年，太牛叉了。这个对企业用户很重要。 &lt;br /&gt; &lt;br /&gt;而Debian的生命周期是不固定的，一般新版本发布以后，上个版本再维护18个月。而Debian的版本发布时间间隔不稳定，经常会延期。综合起来一个版本的生命周期一般在3～4年。 &lt;br /&gt; &lt;br /&gt;[2014.4.24]Debian 宣布对Squeeze(6.0)，提供5年的LTS长期支持。 &lt;br /&gt; &lt;br /&gt;Ubuntu的LTS版生命周期是5年。 &lt;br /&gt; &lt;br /&gt;如果你选用了 Debian 或者 Ubuntu作为服务器，等生命周期过了以后，就没有安全补丁，你的服务器就会裸奔或者需要重新安装系统。 &lt;br /&gt; &lt;br /&gt;2、RedHat是一个值得尊敬的开源公司，长期以来Linux内核RedHat的贡献程度都是最多的。可以这么说，如果一个Linux方面的问题，RedHat搞不定，那么也很少有其他公司可以搞定了。公司有一批Linux内核方面的如雷贯耳的大牛，比如： &lt;br /&gt; &lt;ul&gt;  &lt;li&gt;Alan Cox - Core developer, numerous contributions&lt;/li&gt;  &lt;li&gt;Ingo Molnar - x86 subsystem maintainer&lt;/li&gt;  &lt;li&gt;Al Viro - VFS subsystem maintainer,  linux内核贡献第二多的个人&lt;/li&gt;  &lt;li&gt;David Miller - Sparc Port maintainer, linux网络部分开发者， linux内核贡献最多的个人&lt;/li&gt;  &lt;li&gt;Jeff Garzik - Sata subsystem maintainer&lt;/li&gt;  &lt;li&gt;John Linville - Wireless subsystem maintainer&lt;/li&gt;  &lt;li&gt;Stephen Tweedie - Ext3 filesystem developer&lt;/li&gt;  &lt;li&gt;Eric Sandeen - XFS, Ext4 filesystem developer&lt;/li&gt;  &lt;li&gt;Josef Bacik - Btrfs filesystem developer&lt;/li&gt;  &lt;li&gt;Rik Van Riel - VM developer&lt;/li&gt;  &lt;li&gt;Ric Wheeler - Filesystem developer&lt;/li&gt;  &lt;li&gt;Val Henson - Filesystem developer&lt;/li&gt;  &lt;li&gt;Dave Jones - Fedora kernel maintainer&lt;/li&gt;  &lt;li&gt;Kyle McMartin - Fedora kernel maintainer&lt;/li&gt;  &lt;li&gt;Chuck Ebbert - Fedora kernel maintainer&lt;/li&gt;  &lt;li&gt;Eric Paris - LSM/SELinux/Audit/Capabilities maintainer&lt;/li&gt;  &lt;li&gt;Eugene Teo - Security Response&lt;/li&gt;  &lt;li&gt;Kay Sievers - Hotplug&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;3、CentOS/RHEL对硬件的支持很好，主流硬件厂商早就将服务器拿过去测试，一般不存在硬件的兼容性问题。 &lt;br /&gt; &lt;br /&gt;而Debian就麻烦了，由于有版权上的考虑和代码纯洁性上的洁癖，一些硬件驱动和软件被删掉了，导致安装过程有问题。比如 Dell 服务器上，大量使用的网卡 BroadCom，就驱动不了，安装了以后，网络起不来。 &lt;br /&gt; &lt;br /&gt;4、大量商业软件，比如 Oracle ，都是针对 Redhat认证的，有大量的帮助文档和使用说明，有良好的技术支持。出了问题，也容易在网上找到类似的答案和经验。 &lt;br /&gt; &lt;br /&gt;5、CentOS 是RedHat的克隆版，如果需要可以随时平滑切换到 RedHat，从而享受RedHat的服务支持。要知道厂商的服务，是最后一道防火墙，如果你给一个大客户做方案，他们一般会倾向选用商业服务。万一出了什么问题，还有Redhat可以求助，或者有一个RedHat可以承担责任 :-) &lt;br /&gt; &lt;br /&gt;6、如果你是一个工程师，熟悉了 CentOS/RedHat ，找工作更加容易。如果你是一个企业老板，相对也容易招聘到熟悉CentOS/RedHat的工程师。RHCE的培训，也相对较完善，认同程度高。 &lt;br /&gt; &lt;br /&gt;7、CentOS/RHEL 的批量安装更加方便 &lt;br /&gt; &lt;br /&gt;在机房，使用kickstart + PXE安装，给客户，使用定制的kickstart光盘，一键安装，一般在5分钟左右就可以安装完。 &lt;br /&gt; &lt;br /&gt;上述3，4，5，6几点中，都说明CentOS/RHEL相对于其他Linux操作系统，有相对完整的生态环境，很多公司在CentOS/RHEL投入了大量资源，积累了大量经验，绑定了自己的利益，这个是CentOS/RHEL得以长期良好发展的保证。 &lt;br /&gt; &lt;br /&gt;============= &lt;br /&gt;补充对评论的一些回复 &lt;br /&gt; &lt;br /&gt;1. 所谓的“centos稳定性非常差”，不知道你指的是什么？能否举一些CentOS不稳定的例子？至少我们用了这么多年CentOS，稳定性上可以说是坚如磐石的。如果是你说的由于yum升级造成的混乱，那只能说明你对centos不熟悉。 &lt;br /&gt;2、RHEL/centos 对于一些新的软件的支持，采用 SCL的方式支持，比如ruby193，python27, python 33, PHP 54, nodejs 0.10, mariadb55, postgresql 9.2 &lt;br /&gt; &lt;a href="http://wiki.centos.org/AdditionalResources/Repositories/SCL" rel="nofollow" target="_blank"&gt;AdditionalResources/Repositories/SCL  &lt;em&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;3、debian/ubuntu 同样存在版本稳定和程序太老的矛盾，比如他们的LTS版本，一般是两年多更新一次。 &lt;em&gt;squeeze是2011年2月发布，&lt;/em&gt; &lt;em&gt;wheezy是2013年5月发布，如果你在2013年4月使用Debian，你会发觉好多软件太老，比如：&lt;/em&gt; &lt;br /&gt; &lt;em&gt;内核：2.6.32，和Centos 6  一样的&lt;/em&gt; &lt;br /&gt; &lt;em&gt;glibc 还是使用的&lt;/em&gt;2.11.2 &lt;br /&gt;mysql使用的5.1.49 &lt;br /&gt;openjdk使用的是 6 &lt;br /&gt;php使用的是 5.3.3 &lt;br /&gt;python使用的是2.6.6 &lt;br /&gt; &lt;br /&gt;下一个版本的Deiban，至少要到 2015年下半年才能发布，而RHEL7/CentOS7的正式版发布在即，里面用到的不少软件，都比 &lt;em&gt;wheezy的要新。按照你的逻辑，在接下来较长的时间里，是否CentOS比起Debian更加前卫？&lt;/em&gt; &lt;br /&gt; &lt;br /&gt;再看看 &lt;a href="http://www.zhihu.com/people/rio" rel="nofollow" target="_blank"&gt;Rio  &lt;em&gt;&lt;/em&gt;&lt;/a&gt;的回复：“之前我用了很长一段时间的 Debian，但它的更新实在太慢了（好几年啊有木有！）”，呵呵 &lt;br /&gt; &lt;br /&gt; &lt;em&gt;4、“&lt;/em&gt;debian的支持时间也非常长期 &lt;em&gt;”，这个最近确实有了改善，Debian刚刚宣布对 Debian 6.0 有了5年的LTS长期支持。可以这么说，Debian也看到了LTS的重要性，向CentOS学习了一把。&lt;/em&gt; &lt;br /&gt; &lt;a href="https://www.debian.org/News/2014/20140424" rel="nofollow" target="_blank"&gt;Debian -- News -- Long term support for Debian 6.0 Announced  &lt;em&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;但Debian做得还不够，因为Debian的LTS在后续版本，比如 &lt;strong&gt; Debian 7 (wheezy)， Debian 8 (jessie) 里的支持政策还不明朗：&lt;/strong&gt; &lt;br /&gt; &lt;a href="https://www.debian.org/security/2014/dsa-2907" rel="nofollow" target="_blank"&gt;Debian -- Security Information -- DSA-2907-1  &lt;em&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;Debian的LTS支持，也不是Debian 官方安全团队维护的，而是由其他志愿者维护的，工作效率和质量是否有保证还不知道。相比RHEL明晰的发展策略和安全更新策略，有10年的安全补丁保证，还有不少差距。 &lt;br /&gt; &lt;br /&gt;5、“debian这个系列的软件包也比较新，debian和他儿子ubuntu很多软件包维护是共享的，更新速度非常快”，不知道你使用的是稳定版还是测试版。稳定版里面你是如何看到软件包“更新速度非常快”的。
 &lt;br /&gt; &lt;br /&gt;
— 完 — &lt;br /&gt;
    
本文作者： &lt;a href="http://www.zhihu.com/people/pengyong?utm_campaign=rss&amp;utm_medium=rss&amp;utm_source=rss&amp;utm_content=author"&gt;彭勇&lt;/a&gt; &lt;br /&gt;
            
 &lt;br /&gt;
【知乎日报】
         &lt;a href="http://daily.zhihu.com/download?utm_source=rssyanwenzi&amp;utm_campaign=tuijian&amp;utm_medium=rssnormal" target="_blank"&gt;你都看到这啦，快来点我嘛 Σ(▼□▼メ)&lt;/a&gt; &lt;br /&gt;
 &lt;br /&gt;
此问题还有  &lt;a href="http://www.zhihu.com/question/19599986/answer/13723064?utm_campaign=rss&amp;utm_medium=rss&amp;utm_source=rss&amp;utm_content=title" target="_blank"&gt;129 个回答，查看全部。&lt;/a&gt; &lt;br /&gt;
                延伸阅读： &lt;br /&gt;
 &lt;a href="http://www.zhihu.com/question/19599986?utm_campaign=rss&amp;utm_medium=rss&amp;utm_source=rss&amp;utm_content=title" target="_blank"&gt;服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS？&lt;/a&gt; &lt;br /&gt;
            
 &lt;a href="http://www.zhihu.com/question/19825703?utm_campaign=rss&amp;utm_medium=rss&amp;utm_source=rss&amp;utm_content=title" target="_blank"&gt;企业级别的 Linux，包括 Desktop 版本和 Server 版本，哪一种 Linux 发行版不错呢？&lt;/a&gt; &lt;br /&gt;
            &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/50074-%E6%9C%8D%E5%8A%A1%E5%99%A8-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F-%E9%80%89%E6%8B%A9</guid>
      <pubDate>Thu, 19 Jun 2014 01:00:00 CST</pubDate>
    </item>
    <item>
      <title>魅族宣布与Ubuntu合作 将支持MX3刷机</title>
      <link>https://itindex.net/detail/48176-%E9%AD%85%E6%97%8F-ubuntu-%E5%90%88%E4%BD%9C</link>
      <description>&lt;div&gt;
  &lt;p&gt;   &lt;strong&gt;﻿开源操作系统Ubuntu的开发公司Canonical今天宣布，将与中国手机厂商魅族达成合作，未来将为魅族MX3手机用户提供Ubuntu刷机包。&lt;/strong&gt;魅族副总裁李楠称，开源系统在国外有很大需求，可以在谷歌生态系统之外做一些东西，Ubuntu虽然现在刚开始，未来会有很大市场。他透露魅族在对Mx3手机搭载Ubuntu系统进行测试，最快一周内会有结果，将来会为魅族MX3手机用户提供刷机包。&lt;/p&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;img alt="http://static.cnbetacdn.com/newsimg/2014/0220/25_1j1tbEmpz.jpg" src="http://static.cnbetacdn.com/newsimg/2014/0220/25_1j1tbEmpz.jpg"&gt;&lt;/img&gt;  &lt;br /&gt;  &lt;p&gt;Canonical表示，魅族是Ubuntu重要的合作伙伴，魅族品牌形象很好，同时拥有很大的核心用户群体，同时魅族手机对产品质量和品质的追求与Ubuntu接近。&lt;/p&gt;  &lt;p&gt;此外，Canonical公司称，该公司还与中国一家运营商进行了很积极的合作，未来将会有相关的消息披露。同时该公司称，魅族与Ubuntu会共同与海外运营商进行沟通。&lt;/p&gt;  &lt;p&gt;Ubuntu创始人马克·沙特沃斯在2013年初曾向腾讯科技透露，Ubuntu手机会在2014年第一季度在华发布，当时Ubuntu的战略方向是先与国内的几家运营商展开了沟通，再与中国企业进行合作。&lt;/p&gt;  &lt;p&gt;据悉，移动版Ubuntu具有开源、免费等特性，分为普通版和高级版两个版本，其中普通版对手机配置的要求较低，但是功能有限。目前Ubuntu操作系统的应用约为几百个。&lt;/p&gt;&lt;/div&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/48176-%E9%AD%85%E6%97%8F-ubuntu-%E5%90%88%E4%BD%9C</guid>
      <pubDate>Thu, 20 Feb 2014 18:03:20 CST</pubDate>
    </item>
    <item>
      <title>ubuntu开机后启动程序、用户登录启动后程序、退出登录后启动程序</title>
      <link>https://itindex.net/detail/46969-ubuntu-%E5%BC%80%E6%9C%BA-%E5%90%AF%E5%8A%A8%E7%A8%8B%E5%BA%8F</link>
      <description>&lt;div&gt;
  &lt;p&gt;1. 开机启动时自动运行程序&lt;/p&gt;
  &lt;p&gt;Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程，启动其它进程。通常情况下，修改放置在&lt;/p&gt;
  &lt;p&gt;/etc/rc或&lt;/p&gt;
  &lt;p&gt;/etc/rc.d 或&lt;/p&gt;
  &lt;p&gt;/etc/rc?.d&lt;/p&gt;
  &lt;p&gt;目录下的脚本文件，可以使init自动启动其它程序。例如：编辑/etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本)，在文件最末加上一行“xinit”或“startx”，可以在开机启动后直接进入X－Window。&lt;/p&gt;
  &lt;p&gt;2. 登录时自动运行程序&lt;/p&gt;
  &lt;p&gt;用户登录时，bash先自动执行系统管理员建立的全局登录script ：&lt;/p&gt;
  &lt;p&gt;/ect/profile&lt;/p&gt;
  &lt;p&gt;然后bash在用户起始目录下按顺序查找三个特殊文件中的一个：&lt;/p&gt;
  &lt;p&gt;/.bash_profile、&lt;/p&gt;
  &lt;p&gt;/.bash_login、&lt;/p&gt;
  &lt;p&gt;/.profile，&lt;/p&gt;
  &lt;p&gt;但只执行最先找到的一个。因此，只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序（类似于DOS下的Autoexec.bat）。&lt;/p&gt;
  &lt;p&gt;3. 退出登录时自动运行程序&lt;/p&gt;
  &lt;p&gt;退出登录时，bash自动执行个人的退出登录脚本&lt;/p&gt;
  &lt;p&gt;/.bash_logout。&lt;/p&gt;
  &lt;p&gt;例如，在/.bash_logout中加入命令“tar －cvzf c.source.tgz ＊.c”，则在每次退出登录时自动执行 “tar” 命令备份 ＊.c 文件。&lt;/p&gt;
  &lt;p&gt;4. 定期自动运行程序&lt;/p&gt;
  &lt;p&gt;Linux有一个称为crond的守护程序，主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容，并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。&lt;/p&gt;
  &lt;p&gt;例如，建立文件crondFile，内容为“00 9 23 Jan ＊ HappyBirthday”，运行“crontabcronFile”命令后，每当元月23日上午9:00系统自动执行“HappyBirthday”的程序（“＊”表示不管当天是星期几）。&lt;/p&gt;
  &lt;p&gt;5. 定时自动运行程序一次&lt;/p&gt;
  &lt;p&gt;定时执行命令at 与crond 类似（但它只执行一次）：命令在给定的时间执行，但不自动重复。at命令的一般格式为：at [ －f file ] time ，在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令：&lt;/p&gt;
  &lt;p&gt;＄ at 12:00&lt;/p&gt;
  &lt;p&gt;at&amp;gt;mailto Roger －s ″Have a lunch″ &amp;lt; plan.txt&lt;/p&gt;
  &lt;p&gt;at&amp;gt;Ctr－D&lt;/p&gt;
  &lt;p&gt;Job 1 at 2000－11－09 12:00&lt;/p&gt;
  &lt;p&gt;2000－11－09 12:00时候自动发一标题为“Have a lunch”，内容为plan.txt文件内容的邮件给Roger.&lt;/p&gt;
  &lt;p&gt;   &lt;a href="http://www.linuxidc.com/topicnews.aspx?tid=2" target="_blank" title="Ubuntu"&gt;Ubuntu&lt;/a&gt;下添加开机启动脚本&lt;/p&gt;
  &lt;p&gt;Ubuntu开机之后会执行/etc/rc.local文件中的脚本，所以我们可以直接在/etc/rc.local中添加启动脚本。&lt;/p&gt;
  &lt;p&gt;当然要添加到语句：exit 0 前面才行。&lt;/p&gt;
  &lt;p&gt;如：&lt;/p&gt;
  &lt;p&gt;sudo vi /etc/rc.local&lt;/p&gt;
  &lt;p&gt;然后在 exit 0 前面添加好脚本代码。&lt;/p&gt;
  &lt;p&gt;后续有空再研究下添加一个Ubuntu的开机启动服务看看。&lt;/p&gt;
  &lt;p&gt;如果要添加为开机启动执行的脚本文件，可先将脚本复制或者软连接到/etc/init.d/目录下，然后用：update-rc.d xxx defaults NN命令(NN为启动顺序)，将脚本添加到初始化执行的队列中去。&lt;/p&gt;
  &lt;p&gt;注意如果脚本需要用到网络，则NN需设置一个比较大的数字，如98 。&lt;/p&gt;
&lt;/div&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://feierky.iteye.com/blog/1988009#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="http://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/46969-ubuntu-%E5%BC%80%E6%9C%BA-%E5%90%AF%E5%8A%A8%E7%A8%8B%E5%BA%8F</guid>
      <pubDate>Wed, 11 Dec 2013 10:33:23 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu安装FFmpeg编码出MP4文件的方法</title>
      <link>https://itindex.net/detail/46657-ubuntu-ffmpeg-%E7%BC%96%E7%A0%81</link>
      <description>&lt;div&gt;
  &lt;div&gt;
   &lt;h1&gt;Ubuntu安装FFmpeg编码出MP4文件的方法&lt;/h1&gt;
   &lt;div&gt;
    &lt;div&gt;2011-09-06 16:42 佚名 linux公社 字号：     &lt;a target="_self"&gt;T&lt;/a&gt; |      &lt;a target="_self"&gt;T&lt;/a&gt;
&lt;/div&gt;
    &lt;div&gt;     &lt;a target="_self" title="&amp;#19968;&amp;#38190;&amp;#25910;&amp;#34255;&amp;#65292;&amp;#38543;&amp;#26102;&amp;#26597;&amp;#30475;&amp;#65292;&amp;#20998;&amp;#20139;&amp;#22909;&amp;#21451;&amp;#65281;"&gt;      &lt;img alt="&amp;#19968;&amp;#38190;&amp;#25910;&amp;#34255;&amp;#65292;&amp;#38543;&amp;#26102;&amp;#26597;&amp;#30475;&amp;#65292;&amp;#20998;&amp;#20139;&amp;#22909;&amp;#21451;&amp;#65281;" border="0" src="http://images.51cto.com/images/art/newart1012/images/Fav.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
   &lt;div&gt;
    &lt;p&gt;FFmpeg是Ubuntu下强大的视频、音频编解码工具。 x264可以编码出高质量的h.264视频，iPad必须要h.264编码或mpeg-4编码的视频才能正常播放。Ubuntu官方源默认是不提供h.264编码的，这就需要我们手工编译安装FFmpeg的h.264支持，使之能够编码出MP4文件。&lt;/p&gt;
    &lt;p&gt;AD：     &lt;a href="http://down.51cto.com/zt/5551" target="_blank"&gt;2013云计算架构师峰会课程资料下载&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;p&gt; &lt;/p&gt;
    &lt;p&gt;     &lt;strong&gt;FFmpeg&lt;/strong&gt;是     &lt;strong&gt;Ubuntu&lt;/strong&gt;下强大的视频、音频编解码工具。 x264可以编码出高质量的h.264视频，iPad必须要h.264编码或mpeg-4编码的视频才能正常播放。&lt;/p&gt;
    &lt;p&gt;由于版权方面尚未确定，虽然全国很多网站都在使用h.264编码，但将来很有可能会被版权问题所困扰，所以Ubuntu官方源默认是不提供h.264编码的，这就需要我们手工编译安装FFmpeg的h.264支持，使之能够编码出MP4文件。&lt;/p&gt;
    &lt;p&gt;     &lt;strong&gt;Ubuntu下安装、使用和升级FFmpeg的方法如下&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;     &lt;strong&gt;1、安装支持包&lt;/strong&gt;&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;#libMP3lame  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;sudo apt-get remove libMP3lame-dev  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;sudo apt-get install nasm  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;wget  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;tar xzvf lame-3.98.4.tar.gz  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;cd lame-3.98.4  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;./configure --enable-nasm --disable-shared  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;
sudo checkinstall --pkgname=lame-ffmpeg --pkgversion=&amp;quot;3.98.4&amp;quot; --backup=no --default --deldoc=yes 
&lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;#卸载现有的 x264、libx264-dev、FFmpeg&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;sudo apt-get remove ffmpeg x264 libx264-dev &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;#安装所有的 FFmpeg 和 x264 支持包&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;sudo apt-get update  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libMP3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;2、安装x264&lt;/strong&gt;&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;cd  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;git clone git://git.videolan.org/x264.git  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;cd x264  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;./configure  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;
sudo checkinstall --pkgname=x264 --pkgversion &amp;quot;2:0.`grep X264_BUILD x264.h -m1 | cut -d&amp;apos; &amp;apos; -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | head -c 7`&amp;quot; --backup=no --deldoc=yes --fstrans=no --default 
&lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;3、安装FFmpeg&lt;/strong&gt;&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;cd  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;cd ffmpeg  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libMP3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;
sudo checkinstall --pkgname=ffmpeg --pkgversion &amp;quot;4:SVN-r`LANG=C svn info | grep Revision | awk &amp;apos;{ print $NF }&amp;apos;`&amp;quot; --backup=no --deldoc=yes --fstrans=no --default  
&lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;hash x264 ffmpeg ffplay &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;4、安装qt-faststart(可选)&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;这是个重要的x264再编码工具, 它的作用是使得视频不必等待下载完成即可开始播放。&lt;/p&gt;
    &lt;p&gt;使用方法：&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;qt-faststart input.foo output.foo &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;安装方法：&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;cd ~/ffmpeg  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make tools/qt-faststart  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;
sudo checkinstall --pkgname=qt-faststart --pkgversion &amp;quot;4:SVN-r`LANG=C svn info | grep Revision | awk &amp;apos;{ print $NF }&amp;apos;`&amp;quot; --backup=no --deldoc=yes --fstrans=no --default install -D -m755 tools/qt-faststart /usr/local/bin/qt-faststart 
&lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;5、基本安装完成，你可以保留 ~/x264、~/ffmpeg目录以便将来升级时使用。&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;     &lt;strong&gt;6、升级 FFmpeg 和 x264&lt;/strong&gt;&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;sudo apt-get remove ffmpeg x264 libx264-dev libvpx  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;cd ~/x264  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make distclean  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;git pull  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;cd ~/ffmpeg  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make distclean  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;svn update  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libMP3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;make  &lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;
sudo checkinstall --pkgname=ffmpeg --pkgversion &amp;quot;4:SVN-r`LANG=C svn info | grep Revision | awk &amp;apos;{ print $NF }&amp;apos;`&amp;quot; --backup=no --deldoc=yes --fstrans=no --default  
&lt;/li&gt;
     &lt;li&gt; &lt;/li&gt;
     &lt;li&gt;hash x264 ffmpeg ffplay &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;7、使用 FFmpeg and x264&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;容易的输出高质量视频的方法是使用FFmpeg中libx264的预设模式。你可以手工调整一些选项 (例如窗口大小: -s 640×480) 。 另外你可以参考 libx264 预设模式在线列表或再 /usr/local/share/ffmpeg 目录中查找帮助。&lt;/p&gt;
    &lt;p&gt;One-pass CRF (Constant Rate Factor) 使用预设模式：slow. One-pass CRF是经常使用的常规编码方式. 调整 -crf 可以改变输出质量. 数字越小输出质量越高同时输出尺寸越大. 可使用的数字范围是：18 ～ 28。&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;ffmpeg -i input.avi -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 output.MP4 &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;Two-Pass encode 使用预设模式： fast. 想要精确设置目标编码率、文件大小的时候会使用到这个编码模式。&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;ffmpeg -i input.avi -pass 1 -vcodec libx264 -vpre fast_firstpass -b 512k -bt 512k -threads 0 -f rawvideo -an -y /dev/null &amp;amp;&amp;amp; ffmpeg -i input.avi -pass 2 -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre fast -b 512k -bt 512k -threads 0 output.MP4 &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;iPod/iPad 640×480，使用预设值： slow 和 ipod640:&lt;/p&gt;
    &lt;ol&gt;
     &lt;li&gt;ffmpeg -i input.avi -acodec libfaac -aq 100 -ac 2 -vcodec libx264 -vpre slow -vpre ipod640 -crf 26 -map_meta_data 0:0 -vf scale=640:-1 -threads 0 output.MP4 &lt;/li&gt;
&lt;/ol&gt;
    &lt;p&gt;     &lt;strong&gt;总结：&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;欲知更多有关Ubuntu安装FFmpeg编码出MP4文件的方法，请点击     &lt;a href="http://os.51cto.com/art/201109/289496.htm"&gt;Ubuntu如何转换mp4与x264和h.264&lt;/a&gt;。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://wangxiaoxu.iteye.com/blog/1979373#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="http://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/46657-ubuntu-ffmpeg-%E7%BC%96%E7%A0%81</guid>
      <pubDate>Fri, 22 Nov 2013 12:43:34 CST</pubDate>
    </item>
    <item>
      <title>如何在无显示器的ubuntu下跑selenium</title>
      <link>https://itindex.net/detail/50790-%E6%98%BE%E7%A4%BA%E5%99%A8-ubuntu-selenium</link>
      <description>&lt;div&gt;
  &lt;p&gt;Selenium是一个web自动化测试框架。用它可以实现web应用自动化测试。不过，我不只是用它来做测试，我还用它从电子商务网站签到页面爬取javascript生成的或AJAX的内容。&lt;/p&gt;
  &lt;p&gt;作为程序员，我不满足于使用Selenium IDE来记录和重放宏记录。那样很蹩脚，而且不适合部署到多台服务器。这时，你需要Selenium WebDriver，它又灵活，而且通过Selenium headless，运行Selenium在服务器上不需要显示设备。&lt;/p&gt;
  &lt;h3&gt;为什么要运行Headless Selenium 测试？&lt;/h3&gt;
  &lt;p&gt;当你希望能在服务器上运行的健壮的自动化操作，而其操作又依赖于 27X7，同时还希望它是稳定的，这时，Selenium是你唯一的选择。但是，Selenium需要运行在浏览器上。所以，你得骗Selenium，让它觉得，它正跑在一台带有显示器的机器上。这样，你就可以不间断的跑自动化测试，同时又不失稳定性和扩展性。&lt;/p&gt;
  &lt;h3&gt;如何在ubuntu上运行Selenium headless&lt;/h3&gt;
  &lt;p&gt;本教程的目标是在使用Mozilla Firefox作为主浏览器的ubuntu上配置和运行selenium headless。&lt;/p&gt;
  &lt;h4&gt;安装Firefox headless&lt;/h4&gt;
  &lt;p&gt;确认你的ubuntu安装的是最新版本的Firefox。我遇到过Selenium的版本和Firefox的版本不兼容问题。如果你没有安装Firefox或者使用的是老版本的Firefox，可按以下步骤升级Firefox：&lt;/p&gt;
  &lt;p&gt;在/etc/apt/sources.list加入：&lt;/p&gt;
  &lt;p&gt;ppa:mozillateam/firefox-stable&lt;/p&gt;
  &lt;p&gt;运行以下命令升级或安装Firefox&lt;/p&gt;
  &lt;p&gt;sudo apt-get update&lt;/p&gt;
  &lt;p&gt;sudo apt-get install firefox&lt;/p&gt;
  &lt;p&gt;运行成功后，ubuntu上就应该安装好最新版本的Firefox了。&lt;/p&gt;
  &lt;h4&gt;安装Xvfb——一个X虚拟框架&lt;/h4&gt;
  &lt;p&gt;这个仿真框架使用虚拟内存能让X-Server运行在没有显示设备的机器上。这样，浏览器就可以运行了。在ubuntu和Debian上安装xvfb，只要运行：&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;sudo apt-get install xvfb &lt;/li&gt;
&lt;/ol&gt;
  &lt;p&gt;现在，可以运行xvfb服务上一个带有数字的显示设备上，这样是为了防止你在下阶段添加设备时引发冲突。本教程，我们分配一个显示设备 10..&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;sudo Xvfb :10 -ac &lt;/li&gt;
&lt;/ol&gt;
  &lt;p&gt;   &lt;code&gt;-ac&lt;/code&gt;代表关闭xvfb的访问控制。好了，服务器可以运行了。&lt;/p&gt;
  &lt;h3&gt;启动浏览器&lt;/h3&gt;
  &lt;p&gt;在你运行浏览器前，你首先要设置DISPLAY环境变量，以指定xvfb运行在哪个显示设备上。在加入环境变量前，我们检查一下所有的这些都如我们所料：&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;export DISPLAY=:10   &lt;/li&gt;
   &lt;li&gt;firefox &lt;/li&gt;
&lt;/ol&gt;
  &lt;div&gt;
   &lt;div&gt;
    &lt;p&gt;如果终端(terminal)没有显示错误，就说明你已经成功运行Firefox在无显示设备的ubuntu上了。它会一直运行，直到你使用ctrl + C或其它类似方法来终止其运行。同时，它不会有任何输出。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;p&gt;如果你能成功运行以上的步骤，那么接下来的部分就是轻而易举了。现在，我们可以在ubuntu服务器上运行selenium，如同你在本地运行一样。本教程的下一部分，我展示了如何运行一个独立selenium服务器，同时使用PHP的selenium webdriver去连接。&lt;/p&gt;
  &lt;h3&gt;小结&lt;/h3&gt;
  &lt;p&gt;很久以前，我也使用selenium做自动化的集成测试，使用HtmlUnit的webdriver，所以不需要显示器。但是HtmlUnit的表现总是有些不如意。而最近在项目中发现这篇文章，解决我长久以来的问题：在没有显示器的服务器上运行Firefox的集成测试。&lt;/p&gt;
  &lt;p&gt;而本文，我更多尝试的是意译。有不对的地方，谢谢斧正！&lt;/p&gt;
  &lt;p&gt;英文原文：   &lt;a href="http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/"&gt;http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;译文链接：   &lt;a href="http://my.oschina.net/zjzhai/blog/295288"&gt;http://my.oschina.net/zjzhai/blog/295288&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;转发：   &lt;a href="http://os.51cto.com/art/201407/446726.htm"&gt;http://os.51cto.com/art/201407/446726.htm&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://m635674608.iteye.com/blog/2106870#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="http://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/50790-%E6%98%BE%E7%A4%BA%E5%99%A8-ubuntu-selenium</guid>
      <pubDate>Thu, 21 Aug 2014 10:02:54 CST</pubDate>
    </item>
    <item>
      <title>Nginx+keepalived实现负载均衡和高可用性 in ubuntu</title>
      <link>https://itindex.net/detail/45062-nginx-keepalived-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1</link>
      <description>&lt;div&gt;
  &lt;p&gt;使用Nginx已经有很长一段时间，但是最近才去实践利用Nginx做负载均衡和高可用性。&lt;/p&gt;
  &lt;p&gt;大致思路：根据keepalived的特性，通过一个虚拟ip来实现主从服务器的切换，如果一台服务器宕机，可以自动切换到另一台备份服务器，从而不影响用户的访问。&lt;/p&gt;
  &lt;p&gt;以下是我的安装配置步骤，请大家参考指正。&lt;/p&gt;
  &lt;p&gt;1：服务器准备&lt;/p&gt;
  &lt;p&gt;准备两台ubuntu虚拟主机服务器，对应的IP分别是 192.168.1.100   192.168.1.200&lt;/p&gt;
  &lt;p&gt;两台主机的ip一定要在相同的网段&lt;/p&gt;
  &lt;p&gt;2：虚拟IP准备&lt;/p&gt;
  &lt;p&gt;sudo ifconfig  eth0:0 192.168.1.150 netmask 255.255.255.0&lt;/p&gt;
  &lt;p&gt;然后查看ifconfig,不难发现与之前的ifconfig 的不同。也可以通过ip a查看，对应的网卡eth0有两个ipaddress&lt;/p&gt;
  &lt;p&gt;两台虚拟主机要使用相同的虚拟IP: 192.168.1.150&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;3：安装nginx&lt;/p&gt;
  &lt;p&gt;sudo apt-get install nginx&lt;/p&gt;
  &lt;p&gt;安装完成之后，ps -ef|grep nginx 查看nginx的进程，如果没问题，可以查看http://192.168.1.100  如果显示正常，说明nginx服务正常启动。&lt;/p&gt;
  &lt;p&gt;两台服务器的nginx配置一致&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;4：安装keepalived&lt;/p&gt;
  &lt;p&gt;sudo apt-get install keepalived&lt;/p&gt;
  &lt;p&gt;安装完成之后，查看进程发现并没有keepalived的进程，这是因为keepalived配置文件不存在，需要用户自己创建一个keepalived.conf文件存放到/etc/keepalived目录&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;pre&gt;vrrp_script chk_nginx {
 script &amp;quot;/etc/keepalived/check_nginx.sh&amp;quot; //检测nginx进程的脚本
 interval 2
 weight 2
}

global_defs {
 notification_email {
      //可以添加邮件提醒
 }
}
vrrp_instance VI_1 {
 state MASTER //主服务器
 interface eth0
 virtual_router_id 51 
 mcast_src_ip 192.168.1.100
 priority 250
 advert_int 1

 authentication {
        auth_type PASS
        auth_pass 123456
 }
 track_script {
        chk_nginx
 }
 virtual_ipaddress {
        192.168.1.150
 }
}
&lt;/pre&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;两台服务器的keepalived.conf文件除了优先级，state和mcast_src_ip不一样，其他的完全一致，但是需要注意的几点是：&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;主服务器的state为MASTER,从服务器的state为BACKUP&lt;/li&gt;
   &lt;li&gt;主服务器的priority一定要比从服务器的priority大&lt;/li&gt;
   &lt;li&gt;mcast_src_ip就是对应服务器的局域网ip&lt;/li&gt;
   &lt;li&gt;“{”前面一定要有个空格，不能跟前面的字符连起来，否则出现问题很难发现&lt;/li&gt;
   &lt;li&gt;check_nginx.sh脚本文件的执行权限一定要正确。&lt;/li&gt;
   &lt;li&gt;check_nginx.sh的代码如下：
    &lt;pre&gt;#more /etc/keepalived/check_http.sh
#!/bin/bash
#代码一定注意空格，逻辑就是：如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
 /etc/init.d/nginx start
sleep 3
if [ `ps -C nginx --no-header |wc -l`-eq 0 ];then
 killall keepalived
fi
fi&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
  &lt;p&gt;配置文件完成之后，sudo /etc/init.d/keepalived start,然后再查看下keepalived的进程是否存在，如果存在，再检查keepalived的log（sudo tail /var/log/syslog），如果看到nginx Keepalived_vrrp: VRRP_Script(chk_nginx) succeeded，则说明配置成功。&lt;/p&gt;
  &lt;p&gt;两台服务器的keepalived配置和启动命令是一致的&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;5：测试&lt;/p&gt;
  &lt;p&gt;因为check_nginx的缘故，当启动keepalived是，nginx也会同时被启动，所以此时，查看nginx和keepalived的进程应该都是存在的，否则就是配置有问题。&lt;/p&gt;
  &lt;p&gt;现在访问http://192.168.1.150,如果访问正常，此时应该显示的是主服务器的页面，也就是192.168.1.100的页面，否则也是配置有问题。&lt;/p&gt;
  &lt;p&gt;然后在关闭主服务器的nginx访问，访问http://192.168.1.150页面应该正常，因为check_nginx的缘故。&lt;/p&gt;
  &lt;p&gt;再关闭主服务器的keepalived进程，则此时访问http://192.168.1.150应该显示的是从服务器的页面，也就是192.168.1.200的页面，否则也是配置不正确。&lt;/p&gt;
  &lt;p&gt;如果再关闭从服务器的nginx和keepalived则http://192.168.1.150无法访问。&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;以上就是我的配置步骤，很粗略，还希望大家多指点   &lt;img alt="&amp;#37239;" border="0" src="http://www.iteye.com/javascripts/tinymce/plugins/emotions/img/smiley-cool.gif" title="&amp;#37239;"&gt;&lt;/img&gt;。&lt;/p&gt;
  &lt;p&gt;另外，以下是版本信息&lt;/p&gt;
  &lt;p&gt;ubuntu：Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)&lt;/p&gt;
  &lt;p&gt;Keepalived： v1.2.2&lt;/p&gt;
  &lt;p&gt;nginx version: nginx/1.1.19&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
&lt;/div&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://alec03711.iteye.com/blog/1897095#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="http://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/45062-nginx-keepalived-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1</guid>
      <pubDate>Mon, 01 Jul 2013 17:56:11 CST</pubDate>
    </item>
    <item>
      <title>ubuntu下设置开机自启动项</title>
      <link>https://itindex.net/detail/45429-ubuntu-%E5%BC%80%E6%9C%BA</link>
      <description>&lt;p&gt;可用一些小工具来管理  &lt;strong&gt; Ubuntu&lt;/strong&gt; 的启动选项：  &lt;br /&gt;
  &lt;em&gt;小工具&lt;/em&gt;   &lt;strong&gt;rcconf&lt;/strong&gt;：  &lt;br /&gt;
  &lt;strong&gt;#sudo apt-get rcconf&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo apt-get install rcconf&lt;/strong&gt;  &lt;br /&gt;
root 下运行:   &lt;strong&gt;#sudo rcconf&lt;/strong&gt;  &lt;br /&gt;
  &lt;em&gt;   &lt;strong&gt;功能更全的工具&lt;/strong&gt;&lt;/em&gt;：  &lt;strong&gt;sysv-rc-conf&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo apt-get update&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo apt-get install sysv-rc-conf&lt;/strong&gt;  &lt;br /&gt;
运行：  &lt;strong&gt;#sudo sysv-rc-conf&lt;/strong&gt;  &lt;br /&gt;
也可以直接加入启动程序，例如把 /etc/init.d/red5 加入到系统自动启动列表中：  &lt;br /&gt;
  &lt;strong&gt;   &lt;code&gt;#sudo
 sysv-rc-conf red5 on&lt;/code&gt;&lt;/strong&gt;  &lt;br /&gt;
其他使用方法见: google::Ubuntu::sysv-rc-conf 命令用法&lt;/p&gt;
 &lt;p&gt;也可以直接修改  &lt;br /&gt;
直接改 /etc/rc0.d ~ /etc/rc6.d 和 /etc/rcS.d 下的东西，  &lt;strong&gt;S&lt;/strong&gt;开头的表示启动，  &lt;strong&gt;K&lt;/strong&gt;开头的表示不启动，  &lt;br /&gt;
例如：想关闭 Red5 的开机自动启动，只需 #sudo mv /etc/rc2.d/S20red5 /etc/rc2.d/K20red5 就可以了。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;Ubuntu自动启动程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;首 先，linux随机启动的服务程序都在/etc/init.d这个文件夹里，里面的文件全部都是脚本文件（脚本程序简单的说就是把要运行的程序写 到一个 文件里让系统能够按顺序执行，类似windows下的autorun.dat文件），另外在/etc这个文件夹里还有诸如名为rc1.d, rc2.d一直到rc6.d的文件夹，这些都是linux不同的runlevel，我们一般进入的X windows多用户的运行级别是第5级，也就是rc5.d，在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是，在每个rc
 (1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接（类似windows中的快捷方式），也就是说，在 /etc/init.d文件夹下是全部的服务程序，而每个rc(1-6).d只链接它自己启动需要的相应的服务程序！&lt;/p&gt;
 &lt;p&gt;要 启动scim (某一程序)，我们首先要知道scim程序在哪里，用locate命令可以找到，scim在/usr/bin/scim这里，其中usr表 示是 属于用户的，bin在linux里表示可以执行的程序。这样，我就可以编写一个脚本程序，把它放到/etc/init.d里，然后在rc5.d里做一个相 应的软链接就可以了。&lt;/p&gt;
 &lt;p&gt;这个脚本其实很简单，就两行：&lt;/p&gt;
 &lt;p&gt;#!/bin/bash&lt;/p&gt;
 &lt;p&gt;/usr/bin/scim&lt;/p&gt;
 &lt;p&gt;第一行是声明用什么终端运行这个脚本，第二行就是要运行的命令。&lt;/p&gt;
 &lt;p&gt;还 需要注意的一点是，在rc5.d里，每个链接的名字都是以S或者K开头的，S开头的表示是系统启动是要随机启动的，K开头的是不随机启动的。这 样，你就可以知道，如果我要哪个服务随机启动，就把它名字第一个字母K改成S就可以了，当然，把S改成K后，这个服务就不能随机启动了。因此，我这个链接 还要起名为SXXX，这样系统才能让它随机启动。&lt;/p&gt;
 &lt;pre&gt;在RH下，rc.local是默认启动的最后一个脚本文件，所以，&lt;/pre&gt;
 &lt;pre&gt;如果你想要随机启动，还有一种方法就是在rc.local的尾部加入/usr/bin/scim，这样就可以了。&lt;/pre&gt;
 &lt;p&gt;  &lt;strong&gt;Linux 自动启动程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;1．开机启动时自动运行程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;Linux 加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程，启动其它进程。通常情况下，修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件，可以使init自动启动其它程序。例如：编辑 /etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本)，在文件最末加上一行“xinit”或“startx”，可以在开机启动后直接进入X－Window。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;2．登录时自动运行程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;用 户登录时，bash首先自动执行系统管理员建立的全局登录script ：/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个：/.bash_profile、/.bash_login、 /.profile，但只执行最先找到的一个。  &lt;br /&gt;
因此，只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序（类似于DOS下的Autoexec.bat）。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;3．退出登录时自动运行程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;退出登录时，bash自动执行个人的退出登录脚本/.bash_logout。例如，在/.bash_logout中加入命令“tar －cvzf c.source.tgz ＊.c”，则在每次退出登录时自动执行 “tar” 命令备份 ＊.c 文件。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;4．定期自动运行程序&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;Linux有一个称为crond的守护程序，主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容，并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。&lt;/p&gt;
 &lt;p&gt;例如，建立文件crondFile，内容为“00 9 23 Jan ＊ HappyBirthday”，运行“crontab cronFile”命令后，每当元月23日上午9:00系统自动执行“HappyBirthday”的程序（“＊”表示不管当天是星期几）。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;5．定时自动运行程序一次&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;定时执行命令at 与crond 类似（但它只执行一次）：命令在给定的时间执行，但不自动重复。at命令的一般格式为：at [ －f file ] time ，在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令：&lt;/p&gt;
 &lt;p&gt;＄ at 12:00  &lt;br /&gt;
at&amp;gt;mailto Roger －s ″Have a lunch″ &amp;lt; plan.txt  &lt;br /&gt;
at&amp;gt;Ctr－D  &lt;br /&gt;
Job 1 at 2000－11－09 12:00  &lt;br /&gt;
2000－11－09 12:00时候自动发一标题为“Have a lunch”，内容为plan.txt文件内容的邮件给Roger。?9 12:00  &lt;br /&gt;
2000－11－09 12:00时候自动发一标题为“Have a lunch”，内容为plan.txt文件内容的邮件给Roger。er。ger。er。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;Ubuntu 开机自动挂载windows分区&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;要挂载NTFS格式分区，需要NTFS-3g这个软件。它短小精悍，而且功能强大。  &lt;br /&gt;
NTFS-3g是一个开源软件，它支持在Windows下面读写NTFS格式的分区。它非常的快速，同时也很安全。它支持Windows 2000、XP和2003，并且支持所有的符合POSIX标准的磁盘操作。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;首先要编辑sources.list&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo gedit /etc/apt/sources.list&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;Ubuntu Drapper添加：&lt;/strong&gt;  &lt;br /&gt;
deb http://givre.cabspace.com/ubuntu/ dapper main main-all  &lt;br /&gt;
deb http://ntfs-3g.sitesweetsite.info/ubuntu/ dapper main main-all  &lt;br /&gt;
deb http://flomertens.keo.in/ubuntu/ dapper main main-all  &lt;br /&gt;
  &lt;br /&gt;
  &lt;strong&gt;Ubuntu Edgy添加：&lt;/strong&gt;  &lt;br /&gt;
deb http://givre.cabspace.com/ubuntu/ edgy main  &lt;br /&gt;
deb http://ntfs-3g.sitesweetsite.info/ubuntu/ edgy main  &lt;br /&gt;
deb http://flomertens.keo.in/ubuntu/ edgy main  &lt;br /&gt;
  &lt;br /&gt;
  &lt;strong&gt;同时必须导入GPG-Key，可以这样：&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#wget http://flomertens.keo.in/ubuntu/givre_key.asc -O- | sudo apt-key add -   &lt;br /&gt;
#wget http://givre.cabspace.com/ubuntu/givre_key.asc -O- | sudo apt-key add -   &lt;br /&gt;
&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;现在更新一下源：&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo aptitude update&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;正式安装&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;在“终端”下面运行：  &lt;br /&gt;
  &lt;strong&gt;#sudo apt-get install ntfs-3g&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;配置NTFS-3g&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;首先看一些硬盘分区的分区类型  &lt;br /&gt;
  &lt;strong&gt;#sudo fdisk -l&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;现在就可以修改 /etc/fstab，来让Ubuntu启动的时候自动挂载NTFS分区了。但是首先请备份一下这个文件：  &lt;br /&gt;
  &lt;strong&gt;#sudo cp /etc/fstab /etc/fstab.bak&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;建立挂载点，譬如挂载在 /media/windows 下面  &lt;br /&gt;
  &lt;strong&gt;#sudo mkdir /media/windows&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;现在可以在 /etc/fstab 的后面添加  &lt;br /&gt;
/dev/hda1 /media/ ntfs-3g defaults,locale=zh_CN.utf8 0 0  &lt;br /&gt;
根据自己的情况进行修改。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;一些示例&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;挂载 /dev/hda3  &lt;br /&gt;
添加 /dev/hda3 /media/windows ntfs-3g ro,locale=zh_CN.utf8,uid=1000 0 0&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;关于自己的locale&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;可以用下面的命令查看所有的locale  &lt;br /&gt;
  &lt;strong&gt;#locale -a&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;如果不想重新启动，就可以  &lt;br /&gt;
  &lt;strong&gt;#sudo umount -a   &lt;br /&gt;
#sudo mount -a   &lt;br /&gt;
&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;最后一个挂载FAT分区的命令&lt;/strong&gt;  &lt;br /&gt;
  &lt;strong&gt;#sudo mount /dev/hda3 /media/windows/ -t vfat -o iocharset=utf8,umask=000&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;当然可以在/etc/fstab里面添加&lt;/strong&gt;  &lt;br /&gt;
/dev/hda3 /media/windows vfat iocharset=utf8,umask=000 0 0&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;Openfire随着Ubuntu自动启动&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;openfire缺省情况下，是不随机启动的。为了解决每次都要手工启动的麻烦，我编写了一个脚本，放在/etc/init.d目录里面  &lt;br /&gt;
  &lt;strong&gt;#sudo vim /etc/init.d/openfire&lt;/strong&gt;  &lt;br /&gt;
内容如下：&lt;/p&gt;
 &lt;p&gt;#!/bin/sh&lt;/p&gt;
 &lt;p&gt;openfire_start(){  &lt;br /&gt;
/etc/openfire/bin/openfire start  &lt;br /&gt;
}&lt;/p&gt;
 &lt;p&gt;openfire_stop(){  &lt;br /&gt;
/etc/openfire/bin/openfire stop  &lt;br /&gt;
}&lt;/p&gt;
 &lt;p&gt;case $1 in  &lt;br /&gt;
start)  &lt;br /&gt;
openfire_start  &lt;br /&gt;
;;  &lt;br /&gt;
stop)  &lt;br /&gt;
openfrie_stop  &lt;br /&gt;
;;  &lt;br /&gt;
*)  &lt;br /&gt;
echo ‘Usage:openfire start|stop’  &lt;br /&gt;
;;  &lt;br /&gt;
esac&lt;/p&gt;

 &lt;div&gt;
    作者：cd520yy 发表于2013-8-30 0:53:54   &lt;a href="http://blog.csdn.net/cd520yy/article/details/10567877"&gt;原文链接&lt;/a&gt;
&lt;/div&gt;
 &lt;div&gt;
    阅读：175 评论：0   &lt;a href="http://blog.csdn.net/cd520yy/article/details/10567877#comments" target="_blank"&gt;查看评论&lt;/a&gt;
&lt;/div&gt;

&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/45429-ubuntu-%E5%BC%80%E6%9C%BA</guid>
      <pubDate>Fri, 30 Aug 2013 08:53:54 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu安装squid作为内网的代理服务器(Proxy)的简单配制</title>
      <link>https://itindex.net/detail/45903-ubuntu-squid-%E4%BD%9C%E4%B8%BA</link>
      <description>&lt;p&gt;我有一台Ubuntu Linux的机器，它有无线网卡，可以上外网。我想把它设置为代理服务器，这样内网里的其他机器就可利用它作为代理上外网了。&lt;/p&gt;
 &lt;p&gt;1. 在Ubuntu Linux上安装squid&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;pre&gt;aborn@aborn-lisp:~$ sudo apt-get install squid&lt;/pre&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;br /&gt;
&lt;/p&gt;
2. 安装好后会自动启动，如果使用默认配制，在另一台机器上设置代理（这是我在Chrome上设置代理）：
 &lt;p&gt;  &lt;img alt="" src="http://img.blog.csdn.net/20131004205347000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWFib3Ju/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"&gt;&lt;/img&gt;  &lt;br /&gt;
&lt;/p&gt;
 &lt;p&gt;测试下发现以下问题：&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://img.blog.csdn.net/20131004205347515?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWFib3Ju/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"&gt;&lt;/img&gt;  &lt;br /&gt;
&lt;/p&gt;
 &lt;p&gt;3. 看来还没有Access的权限，配制squid&lt;/p&gt;
 &lt;p&gt;编辑文件squid.conf&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;pre&gt;aborn@aborn-lisp:~$ sudo vi /etc/squid/squid.conf&lt;/pre&gt;
 &lt;br /&gt;
4. 把下面676这行注释去掉，允许localnet的访问
 &lt;p&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" src="http://img.blog.csdn.net/20131004205644234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWFib3Ju/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"&gt;&lt;/img&gt;  &lt;br /&gt;
&lt;/p&gt;
 &lt;p&gt;即：&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;pre&gt; 673 # Example rule allowing access from your local networks.
 674 # Adapt localnet in the ACL section to list your (internal) IP networks                                                                                   
 675 # from where browsing should be allowed
 676 http_access allow localnet
 677 http_access allow localhost&lt;/pre&gt;
 &lt;br /&gt;
5. 重启squid
 &lt;p&gt;&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;pre&gt;aborn@aborn-lisp:~$ sudo /etc/init.d/squid restart&lt;/pre&gt;
 &lt;br /&gt;
6. 然后在另一台机器上可以上网了！！
 &lt;p&gt;&lt;/p&gt;

 &lt;div&gt;
    作者：loveaborn 发表于2013-10-4 20:59:18   &lt;a href="http://blog.csdn.net/loveaborn/article/details/12290587"&gt;原文链接&lt;/a&gt;
&lt;/div&gt;
 &lt;div&gt;
    阅读：90 评论：0   &lt;a href="http://blog.csdn.net/loveaborn/article/details/12290587#comments" target="_blank"&gt;查看评论&lt;/a&gt;
&lt;/div&gt;

&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/45903-ubuntu-squid-%E4%BD%9C%E4%B8%BA</guid>
      <pubDate>Sat, 05 Oct 2013 04:59:18 CST</pubDate>
    </item>
    <item>
      <title>双系统如何正确的删除ubuntu ----清除GRUB在MBR的残留信息</title>
      <link>https://itindex.net/detail/41283-%E7%B3%BB%E7%BB%9F-%E6%AD%A3%E7%A1%AE-%E5%88%A0%E9%99%A4</link>
      <description>&lt;div&gt;
  &lt;p&gt;估计大部分Linux初学者会遇到把Grub安装到MBR上去了，现在不想用Linux，直接用分区工具把Linux分区给删除了，结果导致系统无法启动，具体恢复方法有很多，但是有的时候也很顽固：&lt;/p&gt;
  &lt;p&gt;1、如果能用光盘启动，那么使用光盘启动到dos，使用fdisk /mbr就搞定了。 &lt;/p&gt;
  &lt;p&gt;2、如果不能用用光盘启动，那么用U盘启动（注意启动后C是否是U盘，如果是U盘，那就麻烦了），使用fdisk /mbr没有办法修改实际硬盘的MBR信息，导致无法正常覆盖。（这个我没有搞定，决定使用3解决）&lt;/p&gt;
  &lt;p&gt;3、通过U盘（网络）启动Linux，下载附件，附件是没有安装过Linux系统下备份出来的MBR信息。启动后使用： dd if=boot_mbr.bak of=/dev/hda bs=446 count=1 当然如果你的是scsi或者是SATA硬盘，可能要把/dev/hda改成/dev/sda&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;如果准备删除ubuntu但还没有因删除造成系统无法启动的童鞋可以参照下面的方法：&lt;/p&gt;
  &lt;p&gt;windows+ubuntu双系统,需要删除ubuntu时，    &lt;br /&gt;
千万不要直接格式化linux分区,不然会造成无法进入windows系统.    &lt;br /&gt;
在删除Linux分区前，我们需要将启动Windows的引导信息写入MBR.    &lt;br /&gt;
   &lt;br /&gt;
具体做法:    &lt;br /&gt;
1.下载附件文件.    &lt;br /&gt;
2.解压,把MBRFix.exe文件放到C盘根目录下.    &lt;br /&gt;
3.打开cmd命令窗口,进入到C盘根目录下,(用CD命令),然后输入命令 MbrFix /drive 0 fixmbr ，再确认一下即可。    &lt;br /&gt;
重启你就发现,系统直接就进入windows了,这时候就可以删除linux分区了.&lt;/p&gt;
  &lt;p&gt;   &lt;br /&gt;
&lt;/p&gt;
  &lt;p&gt;*************************************************************************************************************************************************************&lt;/p&gt;
  &lt;p&gt;Linux2010-10-11 17:09:27阅读0评论0 字号：大中小 订阅 如果你有   &lt;em&gt;Windows&lt;/em&gt;系统安装盘/启动盘，或者安装了DOS工具，可以从   &lt;em&gt;Windows&lt;/em&gt; 进入纯DOS界面的话，那么可以分别用fixmbr命令生成正确的引导文件boot.ini，和使用fdisk /mbr命令修复MBR。   &lt;br /&gt;
   &lt;br /&gt;
　　详细请看   &lt;em&gt;windows&lt;/em&gt; xp双系统卸载linux ubuntu。下面要介绍的是如何在没有   &lt;em&gt;windows&lt;/em&gt;系统安装盘，又无法进入DOS 命令行环境的情况下(   &lt;em&gt;windows&lt;/em&gt; 运行cmd 进入的只是模拟的DOS环境)   &lt;em&gt;windows&lt;/em&gt; 双系统如何卸载linux。
   &lt;br /&gt;
   &lt;br /&gt;
　　使用MbrFix.exe卸载   &lt;em&gt;Windows&lt;/em&gt;双系统Linux 不用   &lt;em&gt;Windows&lt;/em&gt;系统安装盘，不用安装矮人DOS工具箱也可以很简单地实现卸载Linux(Ubuntu)。双系统卸载Linux的主要问题是当在   &lt;em&gt;windows&lt;/em&gt; xp中将linux 分区直接格式化之后，Grub系统引导程序也会被同时删除，所以导致重启后无法进入   &lt;em&gt;Windows&lt;/em&gt; 或Ubuntu任何一个系统。因此卸载linux Ubuntu之前，先修复MBR，然后再删除Linux分区就可以了。而MbrFix.exe
 就是这样一个   &lt;em&gt;Windows&lt;/em&gt; 修复MBR的应用程序软件，MbrFix.exe 不仅支持   &lt;em&gt;Windows&lt;/em&gt; XP，还支持32位或64位的   &lt;em&gt;Windows&lt;/em&gt; NT,   &lt;em&gt;Windows&lt;/em&gt; 2000,   &lt;em&gt;Windows&lt;/em&gt; Server 2003,
   &lt;em&gt;Windows&lt;/em&gt; Vista,    &lt;em&gt;Windows&lt;/em&gt; Server 2008,   &lt;em&gt;Windows&lt;/em&gt; 7 和    &lt;em&gt;Windows&lt;/em&gt; PE系统。
   &lt;br /&gt;
   &lt;br /&gt;
　　使用MbrFix.exe卸载Linux Ubuntu的步骤如下：    &lt;br /&gt;
   &lt;br /&gt;
　　1. 下载MbrFix.exe 首先进入   &lt;em&gt;Windows&lt;/em&gt; 操作系统，进入 www.sysint.no 网站下载MbrFix.exe，从上往下数第四个软件即是；下载完成后解压zip压缩包，将MbrFix.exe 剪切到C盘(系统盘)；开始--&amp;gt;运行--&amp;gt;cmd--cd 命令进入C盘符--&amp;gt;运行命令：MbrFix /drive 0 fixmbr /yes--&amp;gt;Enter回车；这样MBR修复就完成了。接下来直接删除linux分区就可以了。   &lt;br /&gt;
   &lt;br /&gt;
　　2. 格式化删除 Linux分区以   &lt;em&gt;Windows&lt;/em&gt; XP系统为例：我的电脑点击右键--&amp;gt;管理--&amp;gt;磁盘管理--&amp;gt;看到几个没有盘符名称的分区(看准哦，不要将   &lt;em&gt;Windows&lt;/em&gt; 分区给误删了。)--&amp;gt;右键--&amp;gt;删除逻辑分区。重启电脑，Grub 已经不复存在，双系统Linux Ubuntu 卸载完成，电脑启动自动进入   &lt;em&gt;Windows&lt;/em&gt; XP 系统.... Ubuntu 就此像地震中失去的生命一样烟消云散了。   &lt;br /&gt;
   &lt;br /&gt;
　　或可以这里下载MbrFix.exe包    &lt;br /&gt;
   &lt;br /&gt;
　　http://www.linuxidc.com/upload/2007_11/07110411258 868.rar &lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;如果没有权限运行cmd&lt;/p&gt;
  &lt;p&gt;那就 在附件——cmd——右键属性——管理员权限运行。&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
 &lt;a name="r_58034383" rel="nofollow"&gt;&lt;/a&gt;
 &lt;table cellpadding="0" cellspacing="0"&gt;

  &lt;tr&gt;
   &lt;td&gt;
    &lt;div&gt;这样看看：     &lt;br /&gt;
     &lt;br /&gt;
显示从     &lt;br /&gt;
开始菜单-&amp;gt;所有程序-&amp;gt;附件-&amp;gt;命令行&lt;/div&gt;
    &lt;div&gt;鼠标点击右键，选择以管理员执行&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
 &lt;br /&gt;
   &lt;br /&gt;
1.出现的问题在win7中的可用空间不能用，无法新建新卷，这说明ubuntu系统还没有删干净，可以拿U盘恢复进入try ubuntu 选项进入终端使用fdisk工具删除这个分区，有时间得学学fdisk这个工具 很好用的！ &lt;br /&gt;
2.或者用window工具diskman软件。（这个更方便一些） &lt;br /&gt;

         &lt;div&gt;
            作者：lujinjian605894472 发表于2012-12-21 12:28:37   &lt;a href="http://blog.csdn.net/lujinjian605894472/article/details/8363328"&gt;原文链接&lt;/a&gt;
        &lt;/div&gt;
         &lt;div&gt;
            阅读：4 评论：0   &lt;a href="http://blog.csdn.net/lujinjian605894472/article/details/8363328#comments" target="_blank"&gt;查看评论&lt;/a&gt;
        &lt;/div&gt;
        
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/41283-%E7%B3%BB%E7%BB%9F-%E6%AD%A3%E7%A1%AE-%E5%88%A0%E9%99%A4</guid>
      <pubDate>Fri, 21 Dec 2012 12:28:37 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu手机：开始没有商店 只有预装</title>
      <link>https://itindex.net/detail/42079-ubuntu-%E6%89%8B%E6%9C%BA-%E6%B2%A1%E6%9C%89</link>
      <description>&lt;p&gt;无论安卓手机还是 iPhone，应用和商店都是重中之重，但是对于即将诞生的 Ubuntu 手机来说，他们准备“不走寻常路”。&lt;/p&gt;  &lt;p&gt;Canoncial 产品经理 Richard Collins 在接受采访时称，第一款 Ubuntu 手机预计会在 2014 年初发布，它只会针对基础用户，只运行预装的软件。&lt;/p&gt;  &lt;p&gt;他说：“说起我们第一个上市产品的策略，目标不是提供一个应用商店，里边到处都是可以下载的应用。我们的态度很明确，那就是面向很重要的一部分市场，这些用户最大的兴趣是只用最核心的应用。”&lt;/p&gt;  &lt;p&gt;也就是说，Ubuntu 手机完全可以运行第三方应用，但那是未来的事情，Canoncial 也计划和开发人员一起创收，并帮助他们把 Ubuntu 桌面应用移植到手机中，但初期不会这样，开始只有最基本的功能。&lt;/p&gt;  &lt;p&gt;在此之前，Canoncial 刚刚发起了社区征集活动，号召开发人员帮忙创建 Ubuntu 移动系统最核心的 12 个应用，它们都会直接预装。&lt;/p&gt;  &lt;p align="center"&gt;  &lt;img alt="Ubuntu &amp;#25163;&amp;#26426;&amp;#65306;&amp;#24320;&amp;#22987;&amp;#27809;&amp;#26377;&amp;#21830;&amp;#24215;&amp;#21482;&amp;#26377;&amp;#39044;&amp;#35013;" src="http://images.cnitblog.com/news/157064/201301/26101039-fa869197d97742579df8348f5ac40a8d.jpg"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;  &lt;a href="http://news.cnblogs.com/n/170401/" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt; &lt;img alt="" height="1" src="http://news.cnblogs.com/news/rssclick.aspx?id=170401" width="1"&gt;&lt;/img&gt; &lt;img border="0" height="1" src="http://cnblogs.feedsportal.com/c/34037/f/617950/s/27e9113e/mf.gif" width="1"&gt;&lt;/img&gt; &lt;br /&gt; &lt;br /&gt; &lt;a href="http://da.feedsportal.com/r/151884837052/u/0/f/617950/c/34037/s/27e9113e/a2.htm"&gt;  &lt;img border="0" src="http://da.feedsportal.com/r/151884837052/u/0/f/617950/c/34037/s/27e9113e/a2.img"&gt;&lt;/img&gt;&lt;/a&gt; &lt;img border="0" height="1" src="http://pi.feedsportal.com/r/151884837052/u/0/f/617950/c/34037/s/27e9113e/a2t.img" width="1"&gt;&lt;/img&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/42079-ubuntu-%E6%89%8B%E6%9C%BA-%E6%B2%A1%E6%9C%89</guid>
      <pubDate>Sat, 26 Jan 2013 16:59:17 CST</pubDate>
    </item>
    <item>
      <title>在 Ubuntu 上安装 NX 服务器</title>
      <link>https://itindex.net/detail/42035-ubuntu-nx-%E6%9C%8D%E5%8A%A1%E5%99%A8</link>
      <description>&lt;p&gt;  &lt;a href="http://www.vpsee.com/2009/09/remote-access-to-ubuntu-desktop/"&gt;远程登陆 Linux 图形桌面有很多方式&lt;/a&gt;，比如使用 RFB (Remote Frame Buffer) 协议的各种 VNC 工具，TightVNC, UltraVNC, Xvnc 等，使用 NX 的 NoMachine, freenx, neatx 等。NX 通过 X11 调用来通信，比 VNC 这种通过截图似的通信要快的多，而且安全（通过 ssh），更适合在网速不高（相比局域网来说）的 Internet 上应用。如果你想在 VPS 上使用 Linux 图形界面的话，使用 NX 是一个比 VNC 好得多的方案。&lt;/p&gt;
 &lt;h2&gt;安装 NX 服务器&lt;/h2&gt;
 &lt;p&gt;到 NoMachine 官网下载 nxserver 4.0 到 Ubuntu 后直接安装就可以了，不需要其他的依赖包，这个比以前的 3.5 版本清晰多了，3.5 版本的 NX 服务器要装 nxnode, nxserver, nxclient，这三个名字很混淆人：&lt;/p&gt;
 &lt;pre&gt;
$ wget http://64.34.173.142/download/4.0/Linux/S/nxserver_4.0.181-7_i386.deb
$ sudo dpkg -i nxserver_4.0.181-7_i386.deb
&lt;/pre&gt;
 &lt;h2&gt;安装 NX 客户端&lt;/h2&gt;
 &lt;p&gt;在 Mac 上下载 nx 客户端 nxplayer 4.0 后安装，需要注意的是，nxplayer 是 nxclient 的下一代版本，目前还是预览版，因为 Mac OS X 10.8 上不能使用旧版本的 nx 客户端（nxclient-3.5.0-7.pkg），安装后不能启动，所以这里只能用 nxplayer 预览版。&lt;/p&gt;
 &lt;pre&gt;
$ wget http://64.34.173.142/download/4.0/MacOSX/nxplayer-4.0.181-7.dmg
&lt;/pre&gt;
 &lt;h2&gt;测试&lt;/h2&gt;
 &lt;p&gt;安装完毕后，在 Mac 上启动一个 nxplayer 连接 Linux 上的 nxserver：&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="nxplayer session" src="http://www.vpsee.com/wp-content/uploads/2013/01/nxplayer.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;
&lt;/p&gt; &lt;p&gt;成功连接后输入用户名和密码就能进入 Ubuntu 桌面了：&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="nxplayer session" src="http://www.vpsee.com/wp-content/uploads/2013/01/nxserver-session.png"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;
&lt;/p&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>Linux | BSD | Solaris linux Mac nomachine nx</category>
      <guid isPermaLink="true">https://itindex.net/detail/42035-ubuntu-nx-%E6%9C%8D%E5%8A%A1%E5%99%A8</guid>
      <pubDate>Thu, 24 Jan 2013 18:55:59 CST</pubDate>
    </item>
    <item>
      <title>如何在Ubuntu上下载、编译和安装Android最新源代码</title>
      <link>https://itindex.net/detail/41309-ubuntu-%E4%B8%8B%E8%BD%BD-%E7%BC%96%E8%AF%91</link>
      <description>&lt;p&gt;看完了前面说的几本书之后，对Linux Kernel和Android有一定的认识了，是不是心里蠢蠢欲动，想小试牛刀自己编译一把Android源代码了呢？一直习惯使用Windows系统，而Android源代码是不支持在Windows上编译上，于是决定使用虚拟机安装Ubuntu，然后下载、编译和安装Android源代码。&lt;/p&gt;
 &lt;p&gt;     一. 环境准备。&lt;/p&gt;
 &lt;p&gt;     1. 磁盘空间预留20G左右，内存3G，因为一边要跑主机，一边要跑虚拟机，内存要求还是比较高的，这样才会比较流畅。&lt;/p&gt;
 &lt;p&gt;     2. 安装VMWare 7.1.4。我的操作系统是Win7，VMWare的版本要新一点的，旧版本的VMWare在网络支持上比较差，由于要在虚拟机上下载Android源代码，没有网络是万万不行的。&lt;/p&gt;
 &lt;p&gt;     3. 安装好VMWare后，接下来就安装Ubuntu系统了。我选择目前最新的版本ubuntu-11.04-alternate-i386，从网上查到的资料说，要编译Android源代码，Ubuntu的最低版本是8.04。下载好后，安装时采用一直默认安装即可。&lt;/p&gt;
 &lt;p&gt;     4. 安装Git工具。Android源代码采用Git工具来管理，与SVN相比，这是一种分布式的源代码管理工具，而SVN是集中式的源代码管理工具。要安装Git工具，在Ubuntu上执行以下命令即可：&lt;/p&gt;
 &lt;p&gt;       &lt;strong&gt;USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupg&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;     &lt;/strong&gt;5. 安装Java SDK。在Ubuntu上执行以下命令：&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
 &lt;div&gt;  &lt;strong&gt;&lt;/strong&gt;
  &lt;div&gt;   &lt;strong&gt;     USER-NAME@MACHINE-NAME:~$ &lt;/strong&gt;   &lt;strong&gt;&lt;/strong&gt;
   &lt;div&gt;sudo add-apt-repository ppa:ferramroberto/java&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;&lt;/strong&gt;
  &lt;div&gt;   &lt;strong&gt;&lt;/strong&gt;
   &lt;div&gt;    &lt;strong&gt;&lt;/strong&gt;
    &lt;div&gt;     &lt;strong&gt;&lt;/strong&gt;
     &lt;div&gt;      &lt;strong&gt;&lt;/strong&gt;
      &lt;div&gt;       &lt;strong&gt;USER-NAME@MACHINE-NAME:~$ &lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;strong&gt;&lt;/strong&gt;
  &lt;div&gt;sudo apt-get update&lt;/div&gt;
&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;&lt;/strong&gt;
  &lt;div&gt;   &lt;strong&gt;&lt;/strong&gt;
   &lt;div&gt;    &lt;strong&gt;&lt;/strong&gt;
    &lt;div&gt;     &lt;strong&gt;&lt;/strong&gt;
     &lt;div&gt;      &lt;strong&gt;     USER-NAME@MACHINE-NAME:~$ &lt;/strong&gt;      &lt;strong&gt;&lt;/strong&gt;
      &lt;div&gt;sudo apt-get install sun-java6-jre sun-java6-plugin&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;&lt;/strong&gt;
  &lt;div&gt;   &lt;strong&gt;&lt;/strong&gt;
   &lt;div&gt;    &lt;strong&gt;&lt;/strong&gt;
    &lt;div&gt;     &lt;strong&gt;&lt;/strong&gt;
     &lt;div&gt;      &lt;strong&gt;     USER-NAME@MACHINE-NAME:~$ &lt;/strong&gt;      &lt;strong&gt;&lt;/strong&gt;
      &lt;div&gt;sudo apt-get install sun-java6-jdk&lt;/div&gt;
      &lt;div&gt;       &lt;/div&gt;
      &lt;div&gt;     &lt;/div&gt;
&lt;/div&gt;
     &lt;div&gt;
      &lt;div&gt;     6. 依赖的其它包。在Ubuntu上执行以下命令：&lt;/div&gt;
      &lt;div&gt;       &lt;br /&gt;
&lt;/div&gt;
      &lt;div&gt;           &lt;strong&gt; USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl&lt;/strong&gt;       &lt;br /&gt;
&lt;/div&gt;
      &lt;div&gt;     7. 调试工具。在Ubuntu上执行以下命令：&lt;/div&gt;
      &lt;div&gt;       &lt;br /&gt;
&lt;/div&gt;
      &lt;div&gt;            &lt;strong&gt;USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind&lt;/strong&gt;&lt;/div&gt;
      &lt;div&gt;       &lt;strong&gt;        &lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;
      &lt;div&gt;       &lt;strong&gt;    二. 下载Android源代码工程。&lt;/strong&gt;&lt;/div&gt;
      &lt;div&gt;       &lt;strong&gt;        &lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;
      &lt;div&gt;       &lt;strong&gt;     1. 下载repo工具。在Ubuntu上执行以下命令：&lt;/strong&gt;&lt;/div&gt;
      &lt;div&gt;       &lt;strong&gt;        &lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;
     USER-NAME@MACHINE-NAME:~$ wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo&lt;/div&gt;
     &lt;div&gt;
      &lt;div&gt;
       &lt;div&gt;     USER-NAME@MACHINE-NAME:~$ chmod 777 repo&lt;/div&gt;
       &lt;div&gt;     USER-NAME@MACHINE-NAME:~$ cp repo /bin/&lt;/div&gt;
&lt;/div&gt;
      &lt;div&gt;     
2. 下载Android最新版本源代码。在Ubuntu上执行以下命令：&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;p&gt;      &lt;strong&gt; USER-NAME@MACHINE-NAME:~$ mkdir Android&lt;/strong&gt;&lt;/p&gt;
 &lt;div&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     USER-NAME@MACHINE-NAME:~$ cd Android&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;        &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android&lt;/strong&gt;$ repo init -u

&lt;/strong&gt;https://dl-ssl.google.com/dl/googlesource/git-repo/repo  &lt;a href="http://android.git.kernel.org/platform/manifest.git"&gt;   &lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;        &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android&lt;/strong&gt;$ repo sync&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     &lt;/strong&gt;经过漫长的等待（我下载了两三天）后，就可以把Android源代码下载下来了。其间可能还有经历下载中断的情况，这时只要重新执行repo sync就可以了。&lt;/div&gt;
 &lt;div&gt;     三. 编译Android源代码。&lt;/div&gt;
 &lt;div&gt;     1. 编译。在Android目录下执行以下命令：&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android$ make&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     &lt;/strong&gt;第一次编译要等待比较久的时间，编译成功后，可以看到下面的输出：&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     Target system fs image:    out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     Install system fs image: out/target/product/generic/system.img&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     Target ram disk: out/target/product/generic/ramdisk.img&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     Target userdata fs image: out/target/product/generic/userdata.img&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     Installed file list: out/target/product/generic/installed-files.txt &lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     &lt;/strong&gt;2. 编译过程中可能会遇到的问题。&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;   &lt;em&gt;问题一：You are attempting to build on a 32-bit system.&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;     两个地方需要个修改：&lt;/div&gt;
 &lt;div&gt;     1）修改build/core目录下的main.mk文件：&lt;/div&gt;
 &lt;div&gt;       &lt;em&gt;ifeq ($(BUILD_OS),linux)&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     build_arch := $(shell uname -m) &lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     &lt;/em&gt;  &lt;strong&gt;   &lt;em&gt;#Change the following line for building on a 32-bit system.&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     #ifneq (64,$(findstring 64,$(build_arch))) &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     ifneq (i686,$(findstring i686,$(build_arch))) &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     $(warning ************************************************************)&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     $(warning You are attempting to build on a 32-bit system.) &lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     $(warning Only 64-bit build environments are supported beyond froyo/2.2.)&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;     2）找到下列文件：&lt;/div&gt;
 &lt;div&gt;     /external/clearsilver/cgi/Android.mk&lt;/div&gt;
 &lt;div&gt;     /external/clearsilver/cs/Android.mk&lt;/div&gt;
 &lt;div&gt;     /external/clearsilver/java-jni/Android.mk&lt;/div&gt;
 &lt;div&gt;     /external/clearsilver/util/Android.mk&lt;/div&gt;
 &lt;div&gt;     修改LOCAL_CFLAGS和LOCAL_LDFLAGS变量：&lt;/div&gt;
 &lt;div&gt;       &lt;em&gt;# This forces a 64-bit build for Java6&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;     # Change the following two lines for building on a 32-bit system.&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;        &lt;strong&gt;# LOCAL_CFLAGS += -m64 &lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;   &lt;strong&gt;     # LOCAL_LDFLAGS += -m64 &lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;   &lt;strong&gt;     LOCAL_CFLAGS += -m32 &lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;em&gt;   &lt;strong&gt;     LOCAL_LDFLAGS += -m32&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;   &lt;em&gt;问题二：Undefined reference to `__dso_handle&amp;apos; &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;     external/stlport/src/monetary.cpp:39: undefined reference to `__dso_handle&amp;apos;&lt;/div&gt;
 &lt;div&gt;out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale.o: In function `__static_initialization_and_destruction_0&amp;apos;:&lt;/div&gt;
 &lt;div&gt;     external/stlport/src/locale.cpp:29: undefined reference to `__dso_handle&amp;apos;&lt;/div&gt;
 &lt;div&gt;out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o: In function `__static_initialization_and_destruction_0&amp;apos;:&lt;/div&gt;
 &lt;div&gt;     external/stlport/src/locale_impl.cpp:31: undefined reference to `__dso_handle&amp;apos;&lt;/div&gt;
 &lt;div&gt;out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o: In function `std::_Locale_impl::make_classic_locale()&amp;apos;:&lt;/div&gt;
 &lt;div&gt;     external/stlport/src/locale_impl.cpp:670: undefined reference to `__dso_handle&amp;apos;&lt;/div&gt;
 &lt;div&gt;     external/stlport/src/locale_impl.cpp:667: undefined reference to `__dso_handle&amp;apos;&lt;/div&gt;
 &lt;div&gt;out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o:external/stlport/src/locale_impl.cpp:604: more undefined&lt;/div&gt;
 &lt;div&gt;     references to `__dso_handle&amp;apos; follow&lt;/div&gt;
 &lt;div&gt;     collect2: ld returned 1 exit status &lt;/div&gt;
 &lt;div&gt;     修改external/stlport/dll_main.cpp，加入以下声明：&lt;/div&gt;
 &lt;div&gt;      &lt;strong&gt;   &lt;em&gt; extern &amp;quot;C&amp;quot; { &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;            void * __dso_handle = 0; &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     } &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     四. 编译SDK，这一步是可选的。&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     1. 编译。执行以下命令：&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;   &lt;em&gt;     &lt;/em&gt;USER-NAME@MACHINE-NAME:~/Android$ make sdk&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;     &lt;/strong&gt;2. 编译过程中可能会遇到的问题。&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;   &lt;em&gt;问题一：找不到bios.bin和vgabios-cirrus.bin文件&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;     couldn&amp;apos;t locate source file: usr/share/pc-bios/bios.bin&lt;/div&gt;
 &lt;div&gt;     couldn&amp;apos;t locate source file: usr/share/pc-bios/vgabios-cirrus.bin&lt;/div&gt;
 &lt;div&gt;     注意，这里的usr/share目录指的是~/Android/out/host/linux-x86目录下的usr/share目录，修改办法是复制~/Android/prebuilt/common下的pc-bios文件夹到~/Android/out/host/linux-x86/usr/share即可：&lt;/div&gt;
 &lt;div&gt;       &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android$ cp ~/Android/prebuilt/common/pc-bios ~/Android/out/host/linux-x86/usr/share&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;       &lt;em&gt;问题二：找不到ddmlib-tests.jar、 ninepath-tests.jar 、common-tests.jar 和sdkuilib-tests.jar文件&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;    在~/Android/out/host/linux-x86/framework这个目录下，可以找到以下几个文件common.jar、ddmlib.jar、ninepatch.jar、sdkuilib.jar这四个文件，然后将它们分别复制一份，并重命名，命名的原则很简单，就是在原有的名字后面跟上－tests即可。&lt;/div&gt;
 &lt;div&gt;    五. 安装编译好的Android镜像到模拟器上。&lt;/div&gt;
 &lt;div&gt;    1. 设置环境变量：&lt;/div&gt;
 &lt;div&gt;      &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin&lt;/strong&gt;  &lt;/div&gt;
 &lt;div&gt;      &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;    &lt;/strong&gt;其中，~/Android/out/host/linux-x86/bin有我们要执行的emulator命令，而~/Android/out/target/product/generic是Android镜像存放目录，下面执行emulator命令时会用到。&lt;/div&gt;
 &lt;div&gt;    2. 运行模拟器。&lt;/div&gt;
 &lt;div&gt;      &lt;strong&gt;USER-NAME@MACHINE-NAME:~/Android$ emulator&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;    &lt;/strong&gt;模拟器运行需要四个文件，分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时，如果不带任何参数，则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件，而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img，也就是我们刚刚编译出来的镜像问题。&lt;/div&gt;
 &lt;div&gt;    当然，我们也可以以指定的镜像文件来运行模拟器，即运行emulator时，即：&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;    USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img&lt;/strong&gt;&lt;/div&gt;
 &lt;div&gt;  &lt;strong&gt;    &lt;/strong&gt;到这里，我们就可以在模拟器上运行我们自己编译的Android镜像文件了，是不是很酷呢？但是注意，这里说的Android镜像文件，只是包括system.img、userdata.img和ramdisk.img这三个文件，而Linux Kernel镜像用的是Android为我们预编译好的kernel-qemu镜像。那么，有没有办法使用我们自己编译的Linux Kernel镜像呢？答案上肯定的，这样我们就可以完全DIY自己的Android系统了！我将在下一篇文章描述如果编译自己的Linux
 Kernel镜像，敬请期待~&lt;/div&gt;
 &lt;div&gt; &lt;/div&gt;
 &lt;p&gt;  &lt;img alt="" src="http://hi.csdn.net/attachment/201106/21/0_1308673538Gj2x.gif"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;br /&gt;
&lt;/p&gt;
 &lt;strong&gt;&lt;/strong&gt;
 &lt;p&gt; &lt;/p&gt;
 &lt;p&gt; &lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;   &lt;a href="http://tingerh.blog.163.com/blog/static/21487201420121122112549459/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;Android开发环境搭建所需资源、安装和配置步骤图解&lt;/a&gt;       
&lt;/strong&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/2148720142012112292439940/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;海量android源码和学习教程与资料集&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt; 
&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/2148720142012112172028308/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;数字电视接口规范大全（行业标准）&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt;                     
&lt;/strong&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/2148720142012111931659331/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;程序员必备：英语口语学习教程大全&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt; 
&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/2148720142012111903855339/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;20本Linux电子书学习教程&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt;                       
       &lt;/strong&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/214872014201211229346620/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;2013年25家IT高科技公司薪酬排行榜&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt;  
&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/21487201420121122103245963/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;2013年Android平台8大预测&lt;/strong&gt;&lt;/a&gt;  &lt;strong&gt;                        
     &lt;/strong&gt;  &lt;a href="http://tingerh.blog.163.com/blog/static/2148720142012112210170256/" target="_blank" title="&amp;#38405;&amp;#35835;&amp;#20840;&amp;#25991;"&gt;   &lt;strong&gt;优秀Android开发人员必须注意的10个误区&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt; &lt;/p&gt;
 &lt;p&gt;  &lt;br /&gt;
 &lt;/p&gt;
 &lt;p align="left"&gt;  &lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;
 &lt;p align="left"&gt;  &lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;
 &lt;p&gt; &lt;/p&gt;

         &lt;div&gt;
            作者：tingerh 发表于2012-12-22 11:46:18   &lt;a href="http://blog.csdn.net/tingerh/article/details/8372811"&gt;原文链接&lt;/a&gt;
        &lt;/div&gt;
         &lt;div&gt;
            阅读：0 评论：0   &lt;a href="http://blog.csdn.net/tingerh/article/details/8372811#comments" target="_blank"&gt;查看评论&lt;/a&gt;
        &lt;/div&gt;
        
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/41309-ubuntu-%E4%B8%8B%E8%BD%BD-%E7%BC%96%E8%AF%91</guid>
      <pubDate>Sat, 22 Dec 2012 11:46:18 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu 12.04 Server安装配置OpenNebula 3.8</title>
      <link>https://itindex.net/detail/41305-ubuntu-server-opennebula</link>
      <description>&lt;p&gt;这个帖子是为2011年11月所发布的《  &lt;a href="http://www.qyjohn.net/?p=1581"&gt;Ubuntu 11.04 Server安装配置OpenNebula 3.0&lt;/a&gt;》一文的升级版。本教程在Ubuntu 12.04 Server的32位版本和64位版本上都进行过测试。在设备匮乏的情况下，本教程也可以在一台笔记本电脑上完成（在这种情况下，业务内网和管理内网合并成一个网络）。文章中嵌入的图片可能看得不是很清楚，可以点击图片看到清晰大图。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[网络拓扑]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;存储设备（可以是FC SAN，可以是磁盘阵列，可以是管理节点上的本地硬盘，也可以是基于MooseFS或者Ceph的分布式文件系统）通过直连管理节点，并挂载为管理节点上的一个目录/srv。&lt;/p&gt;
 &lt;p&gt;管理节点和计算节点各有两个网卡，其中一个网卡连接业务内网，另外一个网卡连接存储内网。在条件允许的情况下，建议业务内网和存储内网都使用万兆网。在不能全面使用万兆网的情况下，建议管理节点（尤其是管理节点上的存储网络）连接到交换机的万兆网口，计算节点连接到交换机的千兆网口。&lt;/p&gt;
 &lt;p&gt;业务内网的IP段为 192.168.1.＊，存储内网的IP段为192.168.2.*。管理节点的IP地址为192.168.1.1和192.168.2.1。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[管理节点的配置]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;全新安装的Ubuntu 12.04 Server操作系统，安装的时候同时安装OpenSSH Server和LAMP Server。将eth0的IP配置为192.168.1.1，将eth1的IP配置为192.168.1.2。&lt;/p&gt;
 &lt;p&gt;安装必要的软件包：&lt;/p&gt;
 &lt;p&gt;sudo apt-get install libsqlite3-dev libxmlrpc-c3-dev g++ ruby libopenssl-ruby libssl-dev ruby-dev libxml2-dev libmysqlclient-dev libmysql++-dev libsqlite3-ruby libexpat1-dev rake rubygems libxml-parser-ruby1.8 libxslt1-dev genisoimage scons mysql-server nfs-kernel-server rails thin curl&lt;/p&gt;
 &lt;p&gt;sudo gem install nokogiri rake xmlparser json thin sequel sinatra sinatra-sequel sqlite3 mysql&lt;/p&gt;
 &lt;p&gt;创建cloud组和oneadmin用户：&lt;/p&gt;
 &lt;p&gt;sudo mkdir -p /srv/cloud/  &lt;br /&gt;
sudo groupadd -g 10000 cloud  &lt;br /&gt;
sudo useradd -u 10000 -g cloud -m oneadmin -d /srv/cloud/one -s /bin/bash  &lt;br /&gt;
sudo passwd oneadmin  &lt;br /&gt;
sudo chown -R oneadmin:cloud /srv/cloud/&lt;/p&gt;
 &lt;p&gt;为oneadmin用户配置无密码登陆：&lt;/p&gt;
 &lt;p&gt;su -l oneadmin  &lt;br /&gt;
ssh-keygen  &lt;br /&gt;
cat ~/.ssh/id_rsa.pub &amp;gt; ~/.ssh/authorized_keys  &lt;br /&gt;
echo “StrictHostKeyChecking no” &amp;gt; ~/.ssh/config  &lt;br /&gt;
exit&lt;/p&gt;
 &lt;p&gt;配置NFS服务：&lt;/p&gt;
 &lt;p&gt;sudo pico /etc/exports&lt;/p&gt;
 &lt;p&gt;增加一行内容：&lt;/p&gt;
 &lt;p&gt;/srv/cloud  192.168.2.*(rw,fsid=0,nohide,sync,root_squash,no_subtree_check)&lt;/p&gt;
 &lt;p&gt;启动NFS服务：&lt;/p&gt;
 &lt;p&gt;sudo /etc/init.d/nfs-kernel-server start&lt;/p&gt;
 &lt;p&gt;需要注意的是，如果/srv本来就是由MooseFS或者Ceph等分布式文件系统挂载过来的，就不需要在这里再次export出去了。&lt;/p&gt;
 &lt;p&gt;创建MySQL数据库：&lt;/p&gt;
 &lt;p&gt;mysql -u root -p  &lt;br /&gt;
CREATE USER ‘oneadmin’@’localhost’ IDENTIFIED BY ‘oneadmin’;  &lt;br /&gt;
CREATE DATABASE opennebula;  &lt;br /&gt;
GRANT ALL PRIVILEGES ON opennebula.* TO ‘oneadmin’ IDENTIFIED BY ‘oneadmin’;  &lt;br /&gt;
quit;&lt;/p&gt;
 &lt;p&gt;从http://downloads.opennebula.org下载最新版本的OpenNebula软件（OpenNebula 3.8.1 tarball），放在oneadmin用户的～目录下：&lt;/p&gt;
 &lt;p&gt;su -l oneadmin  &lt;br /&gt;
tar -zxvf opennebula-3.8.1.tar.gz  &lt;br /&gt;
cd opennebula-3.8.1  &lt;br /&gt;
scons sqlite=no mysql=yes  &lt;br /&gt;
./install.sh -u oneadmin -g cloud -d /srv/cloud/one&lt;/p&gt;
 &lt;p&gt;编辑~/.bash_profile，设置一些环境变量&lt;/p&gt;
 &lt;p&gt;export ONE_LOCATION=/srv/cloud/one  &lt;br /&gt;
export ONE_AUTH=$ONE_LOCATION/.one/one_auth  &lt;br /&gt;
export ONE_XMLRPC=http://localhost:2633/RPC2  &lt;br /&gt;
export PATH=$ONE_LOCATION/bin:/usr/local/bin:/var/lib/gems/1.8/bin/:$PATH&lt;/p&gt;
 &lt;p&gt;执行.bash_profile，使得这些环境变量生效：&lt;/p&gt;
 &lt;p&gt;source ~/.bash_profile&lt;/p&gt;
 &lt;p&gt;编辑~/.one/one_auth，设置OpenNebula的用户名和密码：&lt;/p&gt;
 &lt;p&gt;mkdir ~/.one  &lt;br /&gt;
echo “oneadmin:YOUR_PASSWORD” &amp;gt; ~/.one/one_auth  &lt;br /&gt;
chmod 640 ~/.one/one_auth&lt;/p&gt;
 &lt;p&gt;编辑~/etc/oned.conf，设置OpenNebula所使用的数据库参数：&lt;/p&gt;
 &lt;p&gt;# DB = [ backend = &amp;quot;sqlite&amp;quot; ]&lt;/p&gt;
 &lt;p&gt;# Sample configuration for MySQL  &lt;br /&gt;
DB = [ backend = &amp;quot;mysql&amp;quot;,  &lt;br /&gt;
server = &amp;quot;localhost&amp;quot;,  &lt;br /&gt;
port = 0,  &lt;br /&gt;
user = &amp;quot;oneadmin&amp;quot;,  &lt;br /&gt;
passwd = &amp;quot;oneadmin&amp;quot;,  &lt;br /&gt;
db_name = &amp;quot;opennebula&amp;quot; ]&lt;/p&gt;
 &lt;p&gt;启动OpenNebula服务：&lt;/p&gt;
 &lt;p&gt;one start&lt;/p&gt;
 &lt;p&gt;关闭OpenNebula服务：&lt;/p&gt;
 &lt;p&gt;one stop&lt;/p&gt;
 &lt;p&gt;编辑~/etc/sunstone-server.conf，配置管理界面SunStone的相关参数。如果您需要从管理节点以外的节点访问SunStone管理界面，建议将Server Configuration部分的host参数配置为192.168.1.1。保存该配置之后，使用如下命令启动SunStone服务：&lt;/p&gt;
 &lt;p&gt;sunstone-server start&lt;/p&gt;
 &lt;p&gt;这时您就可以通过http://192.168.1.1:9869/来访问SunStone管理界面了。您需要使用您在~/.one/one_auth文件中所设置的用户名和密码来登陆SunStone管理界面。如果您需要停止SunStone服务，可以使用如下命令：&lt;/p&gt;
 &lt;p&gt;sunstone-server stop&lt;/p&gt;
 &lt;p&gt;编辑~/etc/occi-server.conf，配置用户自助服务界面的相关参数。同样，如果您需要从管理界点以外的节点访问用户自助服务门户，建议将host参数配置为192.168.1.1。保存该配置之后，使用如下命令启动OCCI服务：&lt;/p&gt;
 &lt;p&gt;occi-server start&lt;/p&gt;
 &lt;p&gt;这时您就可以通过http://192.168.1.1:4567/ui来访问用户自助服务界面了。如果您需要停止OCCI服务，可以使用如下命令：&lt;/p&gt;
 &lt;p&gt;occi-server stop&lt;/p&gt;
 &lt;p&gt;SunStone管理界面和OCCI用户自助服务界面都提供了多语言支持。简体中文的语言包是我制作的，该语言包已经被提交给OpenNebula，并且会被包含在即将发布的OpenNebula 4.0版本中。使用OpenNebula 3.8版本的用户，如果需要简体中文界面的话，可以从我的博客下载这个语言包。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/?p=2669"&gt;OpenNebula 3.8中文语言包&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;在下面的介绍中，我们假定您已经依照上面的链接下载并安装了简体中文界面。在~/etc/sunstone-server.conf和~/etc/occi-server.conf中，您需要将lang参数配置为zh_CN，并且重新启动sunstone-server和occi-server两个服务。这时您的SunStone管理界面和OCCI自助服务门户都会被自动切换到简体中文界面。&lt;/p&gt;
 &lt;p&gt;最后，您需要以超级用户身份执行/srv/cloud/one/share目录下的install_novnc.sh脚本，使得SunStone管理界面和OCCI用户自助服务界面支持通过VNC连接到虚拟机控制台。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[计算节点的配置]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;全新安装的Ubuntu 11.04 Server操作系统，安装的时候同时安装OpenSSH Sever和Virtualization。将eth0的IP配置为192.168.1.2，将eth1的IP配置为192.168.2.2。&lt;/p&gt;
 &lt;p&gt;首先安装必要的软件包：&lt;/p&gt;
 &lt;p&gt;（重要说明，如果在计算节点上没有安装ubuntu-vm-builder和ruby这两个软件包，用onehost create命令可以添加该计算节点，但是其状态会显示为err。）&lt;/p&gt;
 &lt;p&gt;sudo apt-get install qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder ruby nfs-common&lt;/p&gt;
 &lt;p&gt;编辑/etc/fstab，配置NFS客户端：（假定OpenNebula管理节点的IP是192.168.1.1）&lt;/p&gt;
 &lt;p&gt;192.168.2.1:/srv/cloud /srv/cloud nfs defaults 0 0&lt;/p&gt;
 &lt;p&gt;创建NFS目录并挂载NFS文件系统：&lt;/p&gt;
 &lt;p&gt;sudo mkdir -p /srv/cloud  &lt;br /&gt;
sudo mount /srv/cloud&lt;/p&gt;
 &lt;p&gt;创建cloud组和oneadmin用户：&lt;/p&gt;
 &lt;p&gt;sudo groupadd -g 10000 cloud  &lt;br /&gt;
sudo useradd -u 10000 -g cloud -m oneadmin -s /bin/bash  &lt;br /&gt;
sudo usermod -d /srv/cloud/one oneadmin  &lt;br /&gt;
sudo passwd oneadmin  &lt;br /&gt;
sudo chown oneadmin:cloud /srv/cloud/&lt;/p&gt;
 &lt;p&gt;编辑/etc/libvirt/libvirtd.conf配置libvirt，将操作权限授予给cloud组：&lt;/p&gt;
 &lt;p&gt;unix_sock_group = “cloud”&lt;/p&gt;
 &lt;p&gt;编辑/etc/libvirt/qemu.conf配置libvirt，设置VNC：&lt;/p&gt;
 &lt;p&gt;vnc_listen = “0.0.0.0″&lt;/p&gt;
 &lt;p&gt;重启libvirt：&lt;/p&gt;
 &lt;p&gt;sudo service libvirt-bin restart  &lt;br /&gt;
sudo chown :cloud /var/run/libvirt/libvirt-sock&lt;/p&gt;
 &lt;p&gt;编辑/etc/network/interface，根据实际的网络状况配置网桥。在这里我们使用eth0连接到业务内网，使用192.168.1.*的内网IP。&lt;/p&gt;
 &lt;p&gt;auto eth0  &lt;br /&gt;
iface eth0 inet manual&lt;/p&gt;
 &lt;p&gt;auto br0  &lt;br /&gt;
iface br0 inet static  &lt;br /&gt;
address 192.168.1.2  &lt;br /&gt;
netmask 255.255.255.0  &lt;br /&gt;
network 192.168.1.0  &lt;br /&gt;
broadcast 192.168.1.255  &lt;br /&gt;
bridge_ports eth0  &lt;br /&gt;
bridge_stp off  &lt;br /&gt;
bridge_fd 0  &lt;br /&gt;
bridge_maxwait 0&lt;/p&gt;
 &lt;p&gt;重启一下网络：&lt;/p&gt;
 &lt;p&gt;sudo service networking restart&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[计算节点的管理]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;3.39.38.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;3.39.38" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;3.39.38.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;登录到SunStone管理界面，在“基础设施－》物理机”页面点击“＋新增”按钮添加计算节点。在“名称”对话框中输入计算节点业务内网的IP 192.168.1.2，其他输入框中使用缺省值即可，然后点击“创建”按钮进行确认。如果计算节点已经按照前一节的描述正确配置好的话，新增加的计算节点会出现在物理机列表里。&lt;/p&gt;
 &lt;p&gt;我们可以通过命令行界面查看计算节点是否添加成功：&lt;/p&gt;
 &lt;p&gt;onehost list&lt;/p&gt;
 &lt;p&gt;这时候应该可以看到192.168.1.2出现在计算节点列表里面。如果计算节点配置正确的话，它的状态（STAT）应该显示为“on”。如果计算节点的状态显示为“err”，说明计算节点没有配置好。这时候可以做三个检查：（1）在管理节点上是否可以用无密码模式SSH登录到计算节点，（2）计算节点是否已经安装好ubuntu-vm-builder和ruby，和（3）在计算节点上oneadmin用户是否有权限控制KVM。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[管理磁盘镜像]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.59.19.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;9.59.19" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.59.19.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;登录到SunStone管理界面，在“应用市场”页面选中“ttylinux-kvm”，并点击右上角的“导入本地基础设施”按钮（中文语言包翻译为“从本地基础设施导入”，属于翻译错误）。无需改动弹出对话框内的任何内容，直接点击“创建”按钮即可。OpenNebula会在后台自动地下载一个预先配置好的ttylinux操作系统映像文件，并注册到OpenNebula数据仓库中。您可以随时在SunStone管理界面的“虚拟资源－》映像”页面中查看现有的磁盘映像及其状态。&lt;/p&gt;
 &lt;p&gt;在OpenNebula中，磁盘映像有三种类型：OS、CD－ROM、Datablock。OS型磁盘映像等价于AWS中的AMI，也等价与Eucalyptus中的EMI；CD－ROM型磁盘映像可以理解为一个ISO文件；Datablock型磁盘映像等价于AWS和Eucalyptus中的弹性块存储EBS。&lt;/p&gt;
 &lt;p&gt;ttylinux是一个精简版的Linux，其磁盘映像比较小，应该可以在很短的时间内完成下载。此后您还可以从应用市场中导入CentOS、Ubuntu、Debian等等由官方发布的操作系统磁盘映像。&lt;/p&gt;
 &lt;p&gt;我们也可以自己制作操作系统磁盘映像。在这里我们推荐您使用VirtualBox这个工具来完成操作系统的安装，安装操作系统时选择磁盘映像格式为VDI。操作系统安装完毕后，可以用下面这个命令将VDI磁盘映像格式转换成RAW磁盘映像格式：&lt;/p&gt;
 &lt;p&gt;VBoxManage clonehd file_name.vdi file_name.img –format raw&lt;/p&gt;
 &lt;p&gt;将RAW格式的磁盘映像拷贝到一台安装有QEMU的Linux机器上，用下面这个命令将RAW磁盘映像格式转换成QCOW2磁盘映像格式：&lt;/p&gt;
 &lt;p&gt;qemu-img convert file_name.img -O qcow2 file_name.qcow2&lt;/p&gt;
 &lt;p&gt;将转换过的磁盘映像（RAW格式或者QCOW2格式）拷贝到管理节点的某个目录里，例如/srv/cloud/one/images。OpenNebula缺省地认为来自用户硬盘的磁盘映像是不安全的，从而拒绝将其导入到数据仓库中。为了让OpenNebula能够导入用户硬盘上的磁盘映像，我们首先需要修改数据仓库的属性。在管理节点上执行如下命令，可以修改default数据仓库的属性：&lt;/p&gt;
 &lt;p&gt;onedatastore update 1&lt;/p&gt;
 &lt;p&gt;在vi编辑窗口中添加一行配置，存盘退出。&lt;/p&gt;
 &lt;p&gt;SAFE_DIRS=”/srv/cloud/one/images”&lt;/p&gt;
 &lt;p&gt;登录到SunStone管理界面，在“虚拟资源－》映像”页面中点击“＋新增”按钮，在弹出的创建磁盘映像对话框中设定要导入的磁盘映像名称、类型、持久性、驱动程序（raw或者企鹅cow）、磁盘映像文件在管理节点上的路径等等信息，然后点击“创建”按钮。OpenNebula就会在后台将指定的磁盘映像倒入到相应的数据仓库中。您可以随时在SunStone管理界面的“虚拟资源－》映像”页面中查看现有的磁盘映像及其状态。&lt;/p&gt;
 &lt;p&gt;如果一个磁盘映像是持久性的，那么在虚拟机运行期间所执行的任何磁盘操作，在虚拟机停机之后依然会保存在磁盘映像中。如果一个磁盘映像是临时性的，那么在虚拟机运行期间所执行的任何磁盘操作，在虚拟机停机之后不会保存在磁盘映像中。&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[管理网络]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.45.46.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;9.45.46" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.45.46.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;登录到SunStone管理界面，在“基础设施－》虚拟网络”页面点击“＋新增”按钮，即可定义可以分配给虚拟机使用的网络。您需要输入该网络的名称（任意字符串）、虚拟网络模式（缺省值为基于普通网桥的网络，还可以选择802.1Q、ebtables、Open vSwitch、VMWare等等网络类型）、网桥、物理网卡、可用的IP地址范围等等信息，然后点击“创建”按钮即可生成又gi额网络。您可以俗世在SunStong管理界面的“基础设施－》虚拟网络”页面中查看现有的网络定义及其状态。&lt;/p&gt;
 &lt;p&gt;您也可以通过命令行的方式来定义一个网络。例如您可以使用文本编辑软件创建一个small_network.net文件，该文件的内容定义了一个网络：&lt;/p&gt;
 &lt;p&gt;NAME = “Small Network”  &lt;br /&gt;
TYPE = FIXED&lt;/p&gt;
 &lt;p&gt;BRIDGE = br1  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.5&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.6&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.7&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.8&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.9&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.10&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.11&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.12&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.13&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.14&amp;quot;]  &lt;br /&gt;
LEASES = [ IP=&amp;quot;192.168.1.15&amp;quot;]&lt;/p&gt;
 &lt;p&gt;将如上所定义的网络添加到系统：&lt;/p&gt;
 &lt;p&gt;onevnet create small_network.net&lt;/p&gt;
 &lt;p&gt;列出系统上所有的网络（刚刚创建的Small Network 的ID可能是0）：&lt;/p&gt;
 &lt;p&gt;onevnet list&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[管理虚拟机模板]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.29.06.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;9.29.06" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;9.29.06.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;在OpenNebula中，操作系统磁盘映像相当于安装有操作系统的可启动硬盘。在创建虚拟机之前，还需要对虚拟机的CPU、内存、网络、显示器、输入设备等等进行定义。在OpenNebula中，我们将这些配置描述称为虚拟机模板。&lt;/p&gt;
 &lt;p&gt;用户可以通过SunStone管理界面方便地定制虚拟机模板。在“虚拟资源－》模板”页面点击“＋新增”按钮，在弹出的创建VM模板中设定模板名称、内存大小、CPU数量（VM在宿主机上实际占用的CPU，精确到0.1）、vCPU数量（VM内部显示的CPU数量，为正整数）、处理器构架（i686或者x86_64）、磁盘映像（从列表中选择一个磁盘映像）、驱动程序（RAW或者QCOW2）、选择网络（从列表中选择一个可用网络）、图形界面（VNC、SDN、SPICE）等等，然后点击“创建”按钮即可生成虚拟机模板。您可以随时在SunStone管理界面的“虚拟资源－》模板”页面中查看现有的虚拟机模板及其状态。&lt;/p&gt;
 &lt;p&gt;如果您在虚拟机模板中使用了持久性的磁盘映像，你只能够基于该模板创建一个正在运行的虚拟机。这是因为一个持久型的磁盘映像只能够同时被应用到一台正在运行的虚拟机上。如果您在虚拟机模板中使用的是临时性的磁盘映像，则可以同时基于该模板创建多个虚拟机。&lt;/p&gt;
 &lt;p&gt;您也可以通过命令行来定义一个模板，编辑ttylinux.one定义虚拟机参数。这里我们使用了一个ttylinux的磁盘映像，该磁盘映像可以从下面这个链接获得。&lt;/p&gt;
 &lt;p&gt;wget http://dev.opennebula.org/attachments/download/170/ttylinux.tar.gz  &lt;br /&gt;
tar zxvf ttylinux.tar.gz&lt;/p&gt;
 &lt;p&gt;模板文件ttylinux.one的内容如下：&lt;/p&gt;
 &lt;p&gt;NAME   = ttylinux  &lt;br /&gt;
CPU    = 0.1  &lt;br /&gt;
MEMORY = 64&lt;/p&gt;
 &lt;p&gt;DISK   = [  &lt;br /&gt;
source   = &amp;quot;/srv/cloud/one/one-templates/ttylinux.img&amp;quot;,  &lt;br /&gt;
target   = &amp;quot;hda&amp;quot;,  &lt;br /&gt;
readonly = &amp;quot;no&amp;quot; ]&lt;/p&gt;
 &lt;p&gt;NIC    = [ NETWORK_ID = 0]&lt;/p&gt;
 &lt;p&gt;GRAPHICS = [ TYPE = &amp;quot;VNC&amp;quot;]&lt;/p&gt;
 &lt;p&gt;FEATURES=[ acpi=&amp;quot;no&amp;quot; ]&lt;/p&gt;
 &lt;p&gt;在系统中创建该虚拟机：&lt;/p&gt;
 &lt;p&gt;onevm create ttylinux.one&lt;/p&gt;
 &lt;p&gt;列出系统上所有的虚拟机（刚刚创建的虚拟机的ID可能是0）：&lt;/p&gt;
 &lt;p&gt;onevm list&lt;/p&gt;
 &lt;p&gt;如上命令列出了系统上所有虚拟机的状态，包括运行这些虚拟机的计算节点。如果需要了解某个虚拟机的详细状况，可以使用onevm show VM_ID命令，例如：&lt;/p&gt;
 &lt;p&gt;onevm show 0&lt;/p&gt;
 &lt;p&gt;这个命令会列出ID为0的虚拟机的所有相关信息，包括运行该虚拟机的计算节点，VNC端口号等等。找到这个端口号（假定为5900），就可以通过VNC客户端连接到该虚拟机的控制台，例如：&lt;/p&gt;
 &lt;p&gt;vncviewer 192.168.1.2:5900&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;管理虚拟机&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;当虚拟机模板创建完毕后，您可以在SunStone管理界面的“虚拟资源－》模板”页面中选中一个虚拟机模板，并点击页面上方的“创建实例”按钮创建一个基于该模板的虚拟机。您也可以在“虚拟资源－》虚拟机”页面点击页面上方的“＋新增”按钮，并在弹出的对话框中选择一个用于创建虚拟机的模板。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;10.01.53.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;10.01.53" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;10.01.53.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;您可以在“虚拟资源－》虚拟机”页面随时查看您可管理的虚拟机列表及其状态，并通过页面上方的各种按钮进行虚拟机生命周期管理操作（例如暂停运行、继续运行、关机、重启、删除等等）。如果您在安装OpenNebula时设定了VNC支持，并且您所创建的虚拟机指定VNC作为控制台显示设备的话，在虚拟机列表中与该虚拟机相对应的VNC图标会被点亮，您可以点击该图标，直接在浏览器中通过VNC连接到该虚拟机的控制台。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;10.10.33.png"&gt;   &lt;img alt="&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031; 2012-12-21 &amp;#19979;&amp;#21320;10.10.33" src="http://www.qyjohn.net/wp-content/uploads/2012/12/&amp;#23631;&amp;#24149;&amp;#24555;&amp;#29031;-2012-12-21-&amp;#19979;&amp;#21320;10.10.33.png" width="600"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;strong&gt;[其他说明]&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;虚拟机的在线迁移，需要配置好所有计算节点的/etc/hosts和/etc/hostname，确保在所有在计算节点上都能够根据主机名来寻找到其他计算节点，不然的话在线迁移会失败。此外，所有节点（包括控制节点和计算节点）之间需要配置无密码SSH登录。&lt;/p&gt;
 &lt;p&gt;数据库的用户名和密码尽可能不要包含：和@字符，否则会出现数据库连接错误。&lt;/p&gt;
 &lt;p&gt;我会在后续的教程中陆续介绍OpenNebula的更多配置和使用方法。&lt;/p&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>技术相关</category>
      <guid isPermaLink="true">https://itindex.net/detail/41305-ubuntu-server-opennebula</guid>
      <pubDate>Fri, 21 Dec 2012 22:14:50 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu：关于Windows 8微软没做错什么</title>
      <link>https://itindex.net/detail/44250-ubuntu-windows-%E5%BE%AE%E8%BD%AF</link>
      <description>&lt;p&gt;  &lt;a href="http://www.wpdang.com/archives/94184.html/wpdang-ubnutu-1" rel="attachment wp-att-94209"&gt;   &lt;img alt="" height="400" src="http://www.wpdang.com/wp-content/uploads/2013/05/WPDang-Ubnutu-1.jpg" title="WPDang-Ubnutu-1" width="640"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;在操作系统市场中，Linux和Windows的竞争似乎是永无止境的，所以有些时候Linux生态中的某些公司的大佬们也会表达自己对微软甚至是Windows系统的一些看法，当然其中有好也有坏。&lt;/p&gt;
 &lt;p&gt;就在厂商、业界分析师甚至是一些用户因Windows 8系统而批评微软的时候，Ubuntu创始人、首席执行官Mark Shuttleworth则在这一问题上表达了自己的看法：对于Windows 8的决策，微软是正确的。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.wpdang.com/archives/94184.html/wpdang-ubnutu-2" rel="attachment wp-att-94210"&gt;   &lt;img alt="" height="480" src="http://www.wpdang.com/wp-content/uploads/2013/05/WPDang-Ubnutu-2.jpg" title="WPDang-Ubnutu-2" width="640"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Shuttleworth是在Ubuntu开放性周例会上被问及到与Windows 8有关的问题的，他认为Windows 8确实带来了很多的创新功能，而且某些巨大的变革对于很多企业级用户来说，是重要的也是必要的，但改变总是很艰难的。为此，他强调：&lt;/p&gt;
 &lt;blockquote&gt;  &lt;p&gt;“虽然Windows 8开局不利，但微软大胆的抉择是正确的，好戏才刚刚开始，我很敬佩微软的远见和他们为了达到目标而付出的努力。”&lt;/p&gt;&lt;/blockquote&gt;
 &lt;p&gt;此言一出，让很多人感到震惊，因为就在微软正式推出Windows 8系统后，Ubuntu就曾建议不习惯新系统的用户转投Ubuntu，而在更早之前Shuttleworth还曾批评微软正在分裂Linux和开源社区。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.wpdang.com/archives/94184.html/wpdang-ubnutu-3" rel="attachment wp-att-94211"&gt;   &lt;img alt="" height="417" src="http://www.wpdang.com/wp-content/uploads/2013/05/WPDang-Ubnutu-3.jpg" title="WPDang-Ubnutu-3" width="640"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;有趣是的，这位Ubuntu的创始人本身也极富传奇色彩。Mark Shuttleworth生于南非，毕业于开普敦大学金融与信息科学专业。在Ubuntu之前，他还创立了安全咨询公司Thawte Consulting，在成功出售该公司后，Mark Shuttleworth一度成为了南非本土最年轻的富翁，并在2002年自费乘坐俄罗斯联盟号飞船完成了一次太空之旅。&lt;/p&gt;
 &lt;p&gt;在结束了这次为期8天的太空之旅后，Mark Shuttleworth创立了Ubuntu，他说，Ubuntu的精神所在即是他在太空中的所感所想。&lt;/p&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>Windows 专题 Ubuntu Windows 8 微软</category>
      <guid isPermaLink="true">https://itindex.net/detail/44250-ubuntu-windows-%E5%BE%AE%E8%BD%AF</guid>
      <pubDate>Wed, 29 May 2013 16:02:32 CST</pubDate>
    </item>
    <item>
      <title>安装Ubuntu Phone/Ubuntu Touch 的一些文档</title>
      <link>https://itindex.net/detail/42573-ubuntu-phone-ubuntu</link>
      <description>&lt;p&gt;官方WIKI ：  &lt;a href="https://wiki.ubuntu.com/Touch/Install" rel="nofollow" target="_blank"&gt;https://wiki.ubuntu.com/Touch/Install&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;译文：  &lt;a href="http://article.yeeyan.org/view/234036/349425" rel="nofollow" target="_blank"&gt;http://article.yeeyan.org/view/234036/349425&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Nexus系列刷Ubuntu移动版（预览版）教程（WINDOWS 下）：  &lt;a href="http://www.anzhuo.cn/thread-560645-1-1.html" rel="nofollow" target="_blank"&gt;http://www.anzhuo.cn/thread-560645-1-1.html&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Ubuntu Touch 安装指南与上手体验（持续更新）（Ubuntu 下）：  &lt;a href="http://www.ifanr.com/251951" rel="nofollow" target="_blank"&gt;http://www.ifanr.com/251951&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Install Ubuntu Touch Preview on Nexus Devices（Ubuntu 下）：  &lt;a href="http://www.omgubuntu.co.uk/2013/02/how-to-install-ubuntu-phone-tablet-preview-on-nexus-devices" rel="nofollow" target="_blank"&gt;http://www.omgubuntu.co.uk/201 … vices&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;注，刷完Ubuntu Phone 后想刷回Android ，只需要像正常刷Android 一样刷回来即可，附带一个教程：  &lt;a href="http://www.anzhuo.cn/thread-557501-1-1.html" rel="nofollow" target="_blank"&gt;http://www.anzhuo.cn/thread-557501-1-1.html&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Galaxy S3 安装Ubuntu  Phone：  &lt;a href="http://www.omgubuntu.co.uk/2013/02/ubuntu-phone-up-running-on-samsung-galaxy-s3"&gt;http://www.omgubuntu.co.uk/2013/02/ubuntu-phone-up-running-on-samsung-galaxy-s3&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://blog.ubuntusoft.com/wp-content/uploads/2013/02/20130222.jpg"&gt;   &lt;img alt="" height="768" src="http://blog.ubuntusoft.com/wp-content/uploads/2013/02/20130222-1024x768.jpg" title="20130222" width="1024"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;h3&gt;  &lt;strong&gt;一些图片预览的网页：&lt;/strong&gt;&lt;/h3&gt;
 &lt;p&gt;  &lt;a href="http://www.ifanr.com/251951"&gt;http://www.ifanr.com/251951&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://blog.ubuntusoft.com/wp-content/uploads/2013/02/IMG_8080.jpg"&gt;   &lt;img alt="" height="625" src="http://blog.ubuntusoft.com/wp-content/uploads/2013/02/IMG_8080.jpg" title="IMG_8080" width="1000"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;新浪科技：  &lt;a href="http://slide.tech.sina.com.cn/mobile/slide_5_22298_27500.html"&gt;http://slide.tech.sina.com.cn/mobile/slide_5_22298_27500.html&lt;/a&gt;&lt;/p&gt;
 &lt;h3&gt;  &lt;strong&gt;上手体验：&lt;/strong&gt;&lt;/h3&gt;
 &lt;p&gt;目前是开发者预览版，仅带有少数几个核心应用，里面有附带亚马逊和eBay以及音乐商场，有点类似Ubuntu 桌面集成了一些商业服务。&lt;/p&gt;
 &lt;p&gt;支持打电话、WIFI上网，不支持GPRS。&lt;/p&gt;
 &lt;p&gt;在Nexus 4下十分流畅，但从微博上别人的体验来看，貌似在Galaxy Nexus 下会卡顿。&lt;/p&gt;
 &lt;p&gt;里面有一部份功能是暂时无法使用的。&lt;/p&gt;
 &lt;p&gt;UI 也确实比较好看（见仁见智）。&lt;/p&gt;
 &lt;p&gt;使用体验上，全手势操作以及Unity，还是很新颖的，使用者需要一定的适应期，但是至于以后能不能打破安卓和IOS 那种体验，就很难说了。不过我个人很喜欢这样的操作体验。&lt;/p&gt;
 &lt;p&gt;好吧就这样了。由于没有其它可拍摄的设备，就不上我自己的图了，我会把网络上的一些截图更新过来。&lt;/p&gt;
 &lt;hr&gt;&lt;/hr&gt;
 &lt;p&gt;  &lt;small&gt;© lingyired for    &lt;a href="http://blog.ubuntusoft.com"&gt;Ubuntusoft&lt;/a&gt;, 2013. |
   &lt;a href="http://blog.ubuntusoft.com/install-ubuntu-phone-ubuntu-touch.html"&gt;固定链接&lt;/a&gt; |
   &lt;a href="http://blog.ubuntusoft.com/install-ubuntu-phone-ubuntu-touch.html#comments"&gt;暂无评论&lt;/a&gt; | 
   &lt;a href="http://weibo.com/ubuntusoft" target="_blank"&gt;微博&lt;/a&gt; | 
   &lt;a href="https://twitter.com/ubuntusoft" target="_blank"&gt;Twitter&lt;/a&gt; | 
   &lt;a href="http://linuxrss.org" target="_blank"&gt;论坛&lt;/a&gt; | 
   &lt;a href="https://twitter.com/lingyired" target="_blank"&gt;lingyired@twitter&lt;/a&gt;   &lt;table border="0" cellpadding="3" cellspacing="0"&gt;
    
        &lt;tr&gt;
             &lt;td colspan="4"&gt;      &lt;strong&gt;您可能也喜欢：&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
            &lt;tr&gt;
                     &lt;td valign="top" width="102"&gt;
                          &lt;a href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fblog.ubuntusoft.com%2Fubuntu-os-for-mobile.html&amp;from=http%3A%2F%2Fblog.ubuntusoft.com%2Finstall-ubuntu-phone-ubuntu-touch.html" target="_blank" title="Ubuntu&amp;#21457;&amp;#24067;&amp;#31227;&amp;#21160;&amp;#29256;&amp;#25805;&amp;#20316;&amp;#31995;&amp;#32479;"&gt;
                               &lt;img height="96px" src="http://static.wumii.cn/site_images/2013/01/03/68030751.jpg" width="96px"&gt;&lt;/img&gt;       &lt;br /&gt;
                        Ubuntu发布移动版操作系统
                    &lt;/a&gt;
                &lt;/td&gt;
                     &lt;td valign="top" width="102"&gt;
                          &lt;a href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fblog.ubuntusoft.com%2Fubuntu10-10-install-multi-touch-magic-trackpad.html&amp;from=http%3A%2F%2Fblog.ubuntusoft.com%2Finstall-ubuntu-phone-ubuntu-touch.html" target="_blank" title="Ubuntu10.10&amp;#23433;&amp;#35013;Multi-touch Magic Trackpad"&gt;
                               &lt;img height="96px" src="http://static.wumii.cn/site_images/2013/01/28/72041051.jpg" width="96px"&gt;&lt;/img&gt;       &lt;br /&gt;
                        Ubuntu10.10安装Multi-touch Magic Trackpad
                    &lt;/a&gt;
                &lt;/td&gt;
                     &lt;td valign="top" width="102"&gt;
                          &lt;a href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fblog.ubuntusoft.com%2Fubuntu-10-10-the-first-beta-release-provides-a-new-setup.html&amp;from=http%3A%2F%2Fblog.ubuntusoft.com%2Finstall-ubuntu-phone-ubuntu-touch.html" target="_blank" title="Ubuntu 10.10&amp;#39318;&amp;#20010;Beta&amp;#21457;&amp;#24067;,&amp;#25552;&amp;#20379;&amp;#20102;&amp;#26032;&amp;#23433;&amp;#35013;&amp;#31243;&amp;#24207;"&gt;
                               &lt;img height="96px" src="http://static.wumii.cn/site_images/2013/01/28/72041051.jpg" width="96px"&gt;&lt;/img&gt;       &lt;br /&gt;
                        Ubuntu 10.10首个Beta发布,提供了新安装程序
                    &lt;/a&gt;
                &lt;/td&gt;
                     &lt;td valign="top" width="102"&gt;
                          &lt;a href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fblog.ubuntusoft.com%2Fgt240-install-ubuntu.html&amp;from=http%3A%2F%2Fblog.ubuntusoft.com%2Finstall-ubuntu-phone-ubuntu-touch.html" target="_blank" title="GT240&amp;#19979;&amp;#31616;&amp;#21333;&amp;#23433;&amp;#35013;ubuntu10.10&amp;#21450;&amp;#26356;&amp;#39640;&amp;#29256;&amp;#26412;ubuntu&amp;#30340;&amp;#26041;&amp;#27861;"&gt;
                               &lt;img height="96px" src="http://static.wumii.cn/site_images/2013/01/28/72033752.jpg" width="96px"&gt;&lt;/img&gt;       &lt;br /&gt;
                        GT240下简单安装ubuntu10.10及更高版本ubuntu的方法
                    &lt;/a&gt;
                &lt;/td&gt;
        &lt;/tr&gt;
    
        &lt;tr&gt;
             &lt;td align="right" colspan="4"&gt;
                  &lt;a href="http://www.wumii.com/widget/relatedItems" target="_blank" title="&amp;#26080;&amp;#35269;&amp;#30456;&amp;#20851;&amp;#25991;&amp;#31456;&amp;#25554;&amp;#20214;"&gt;
                无觅
            &lt;/a&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;&lt;/small&gt;&lt;/p&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>新闻 ubuntu phone ubuntu touch</category>
      <guid isPermaLink="true">https://itindex.net/detail/42573-ubuntu-phone-ubuntu</guid>
      <pubDate>Fri, 22 Feb 2013 21:41:41 CST</pubDate>
    </item>
    <item>
      <title>Canonical发布Ubuntu手机应用设计指南</title>
      <link>https://itindex.net/detail/42549-canonical-ubuntu-%E6%89%8B%E6%9C%BA</link>
      <description>&lt;p&gt;  &lt;em&gt;综合来源：   &lt;a href="http://linux.cn/thread/10007/1/1/" target="_blank"&gt;linux.cn&lt;/a&gt; &amp;amp;    &lt;a href="http://tech.sina.com.cn/n/pad/2013-02-20/08268073798.shtml" target="_blank"&gt;Sina Tech&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
 &lt;p&gt;之前有外媒报导，Canonical公司将于2月21日发布Ubuntu手机操作系统的开发者预览版本，如果想体验这款全新操作系统，不管是开发者还是普通用户，需要使用三星Galaxy Nexus和谷歌Nexus 4进行安装。Canonical也将提供安装工具和指南。此外，采用Ubuntu系统的商用平板电脑预计将到2014年才会推出。&lt;/p&gt;
 &lt;p&gt;另外，Canonical 于2月13日在Ubuntu官网发布了  &lt;a href="http://design.ubuntu.com/apps" target="_blank"&gt;Ubuntu手机应用设计指南站点&lt;/a&gt;，其希望这个资源能够解决 Ubuntu 应用程序开发人员的尽可能多的问题。&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://design.ubuntu.com/apps"&gt;   &lt;img alt="" height="270" src="http://developer.ubuntu.com/wp-content/uploads/2013/02/typography.jpg" title="typography" width="540"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Ubuntu 应用程序设计指南是一个在线资源，将会长期为大家提供 Ubuntu 各种设备的详细信息。具有 SDK 预览功能，希望在这个资源的支持下，Ubuntu 应用程序开发人员可以设计建造出各方面都优良的应用程序。&lt;/p&gt;
 &lt;p&gt;社区还提供了为   &lt;a href="http://www.jonobacon.org/2013/01/23/community-driven-ubuntu-phone-core-apps/" rel="external nofollow" target="_blank"&gt;Ubuntu 手机版中默认自带的 12 个应用程序&lt;/a&gt;的全部设计指南，供大家参考。&lt;/p&gt;
 &lt;div&gt;  &lt;a href="https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/Weather+App.png?version=11&amp;etag=zkRwEiu3bSHe1dEMPYP7vSyEoN1QZTKn" rel="external nofollow" target="_blank"&gt;   &lt;img alt="" border="0" height="444" src="https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/Weather+App.png?version=11&amp;etag=zkRwEiu3bSHe1dEMPYP7vSyEoN1QZTKn" usemap="#map652882" width="700"&gt;&lt;/img&gt;&lt;/a&gt;
  &lt;p&gt;点击查看大图&lt;/p&gt;
&lt;/div&gt;
 &lt;p&gt; &lt;/p&gt;
 &lt;p&gt;例如天气程序的设计指南：  &lt;a href="https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/Weather+App" rel="external nofollow" target="_blank"&gt;https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/Weather+App&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;已经有超过 50 位设计师共享了近 90 个手机应用程序设计图：  &lt;a href="https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/grid" rel="external nofollow" target="_blank"&gt;https://ubuntu.mybalsamiq.com/projects/ubuntuphonecoreapps/grid&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;如果您也有任何关于设计项目想和 Ubuntu 合作，可以联系： David Planella &amp;lt;david(dot)planella(at)canonical(dot)com&amp;gt; 或者 Michael Hall &amp;lt;michael(dot)hall(at)canonical(dot)com&amp;gt;&lt;/p&gt;
 &lt;p&gt;如果您对这个设计指南有任何意见和建议，您可以通过这个邮件列表来和他们交流：  &lt;a href="https://launchpad.net/~ubuntu-phone/+join" rel="external nofollow" target="_blank"&gt;https://launchpad.net/~ubuntu-phone/+join&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;更多的默认自带的应用程序将会公布在这里：  &lt;a href="http://design.canonical.com/2013/02/announcing-the-app-design-guides/" rel="external nofollow" target="_blank"&gt;http://design.canonical.com/2013/02/announcing-the-app-design-guides/&lt;/a&gt;&lt;/p&gt;
 &lt;h4&gt;相关文章&lt;/h4&gt;
 &lt;ul&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/32249/"&gt;    &lt;img alt="vim-css-color" height="150" src="http://blog.jobbole.com/wp-content/uploads/2013/01/vim-css-color-150x150.png" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/32249/"&gt;Ubuntu桌面生存指南(5)：Ubuntu常用效率软件简介&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/1236/"&gt;    &lt;img alt="2011&amp;#24180;7&amp;#20010;&amp;#26368;&amp;#20339;&amp;#30340;Linux&amp;#21457;&amp;#34892;&amp;#29256;" src="http://blog.jobbole.com/wp-content/plugins/wordpress-23-related-posts-plugin/static/thumbs/29.jpg"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/1236/"&gt;2011年7个最佳的Linux发行版&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/29546/"&gt;    &lt;img alt="ubuntu logo" height="150" src="http://blog.jobbole.com/wp-content/uploads/2012/10/ubuntu-logo-150x150.jpg" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/29546/"&gt;Ubuntu桌面生存指南(1)：选择 Linux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/29668/"&gt;    &lt;img alt="Ubuntu&amp;#26700;&amp;#38754;&amp;#29983;&amp;#23384;&amp;#25351;&amp;#21335;(2)&amp;#65306;Ubuntu&amp;#26700;&amp;#38754;&amp;#20307;&amp;#39564;&amp;#31616;&amp;#20171;" height="150" src="http://blog.jobbole.com/wp-content/uploads/2012/10/ubuntu-01-150x150.png" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/29668/"&gt;Ubuntu桌面生存指南(2)：Ubuntu桌面体验简介&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/29848/"&gt;    &lt;img alt="Ubuntu&amp;#26700;&amp;#38754;&amp;#29983;&amp;#23384;&amp;#25351;&amp;#21335; (3) --- &amp;#26500;&amp;#24314;Ubuntu&amp;#31995;&amp;#32479;&amp;#22522;&amp;#30784;&amp;#35774;&amp;#26045;" height="150" src="http://blog.jobbole.com/wp-content/uploads/2012/11/startup-disk-creator-150x150.png" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/29848/"&gt;Ubuntu桌面生存指南(3)：构建Ubuntu系统基础设施&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/31218/"&gt;    &lt;img alt="Ubuntu&amp;#26700;&amp;#38754;&amp;#29983;&amp;#23384;&amp;#25351;&amp;#21335;(4)&amp;#65306;Ubuntu&amp;#31995;&amp;#32479;&amp;#22791;&amp;#20221;&amp;#24674;&amp;#22797;&amp;#21319;&amp;#32423;&amp;#31574;&amp;#30053;" src="http://blog.jobbole.com/wp-content/uploads/2013/02/ubuntu-logo1-150x150.jpg"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/31218/"&gt;Ubuntu桌面生存指南(4)：Ubuntu系统备份恢复升级策略&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/179/"&gt;    &lt;img alt="&amp;#24320;&amp;#28304;&amp;#21490;&amp;#19978;&amp;#26368;&amp;#25104;&amp;#21151;&amp;#30340;&amp;#20843;&amp;#20010;&amp;#24320;&amp;#28304;&amp;#20135;&amp;#21697;" src="http://blog.jobbole.com/wp-content/uploads/2010/08/opensource-logo.gif"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/179/"&gt;开源史上最成功的八个开源产品&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/11468/"&gt;    &lt;img alt="2011&amp;#24180;&amp;#20351;&amp;#29992;&amp;#29575;&amp;#22686;&amp;#38271;&amp;#26368;&amp;#24555;&amp;#30340;&amp;#21313;&amp;#22823;Web&amp;#25216;&amp;#26415;" src="http://blog.jobbole.com/wp-content/uploads/2011/11/jQuery-logo.png"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/11468/"&gt;2011年使用率增长最快的十大Web技术&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/31702/"&gt;    &lt;img alt="&amp;#31119;&amp;#29305;&amp;#24320;&amp;#21457;&amp;#32773;&amp;#35745;&amp;#21010; Ford Developer Program" height="150" src="http://blog.jobbole.com/wp-content/uploads/2013/01/&amp;#31119;&amp;#29305;&amp;#24320;&amp;#21457;&amp;#32773;&amp;#35745;&amp;#21010;-Ford-Developer-Program-150x150.jpg" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/31702/"&gt;CES 2013: 福特发布软件开发工具包（SDK）&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   &lt;a href="http://blog.jobbole.com/31146/"&gt;    &lt;img alt="Guido Van Rossum has tweeted Today is my last day at Google" height="150" src="http://blog.jobbole.com/wp-content/uploads/2012/12/Guido-Van-Rossum-has-tweeted-Today-is-my-last-day-at-Google--150x150.png" width="150"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://blog.jobbole.com/31146/"&gt;Python之父从Google离职，加入Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category>业界资讯 Ubuntu</category>
      <guid isPermaLink="true">https://itindex.net/detail/42549-canonical-ubuntu-%E6%89%8B%E6%9C%BA</guid>
      <pubDate>Fri, 22 Feb 2013 00:58:56 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu移动操作系统开放下载，首批支持Galaxy Nexus、Nexus 4、Nexus 7和Nexus10</title>
      <link>https://itindex.net/detail/42548-ubuntu-%E7%A7%BB%E5%8A%A8-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F</link>
      <description>&lt;p&gt;  &lt;img alt="" src="http://a.36krcnd.com/photo/dba3ff0582c149bd88b9f5b7b1795e7f.jpg"&gt;&lt;/img&gt;&lt;/p&gt;

 &lt;p&gt;此前Ubuntu宣布将于今年10月份才  &lt;a href="http://www.36kr.com/p/201240.html"&gt;正式推出&lt;/a&gt;基于Ubuntu的手机。不过值得高兴的是，今天Ubuntu手机ROM已经  &lt;a href="http://cdimage.ubuntu.com/ubuntu-touch-preview/quantal/mwc-demo/"&gt;开放下载&lt;/a&gt;了，首批支持的机型有  &lt;strong&gt;Galaxy Nexus&lt;/strong&gt;、  &lt;strong&gt;Nexus 4&lt;/strong&gt;、  &lt;strong&gt;Nexus 7&lt;/strong&gt;和  &lt;strong&gt;Nexus10&lt;/strong&gt;。&lt;/p&gt;

 &lt;p&gt;根据Ubuntu官方网站的说明，此次发布的Ubuntu移动操作系统为开发者预览版，这是一个全新的，但并未完成的Ubuntu版本，仅供开发人员测试使用。目前Ubuntu未能提供完整的手机功能，不能够替代日常使用的手机。并且值得注意的是，如果刷入了Ubuntu将会清空原来Android的所有数据，并且是不能够恢复的。&lt;/p&gt;

 &lt;p&gt;由于是首个开发者预览版本，Ubuntu仍然存在一些BUG，目前已知的BUG有：&lt;/p&gt;

 &lt;blockquote&gt;
  &lt;p&gt;内存优化不足，同时开多个应用容易导致系统崩溃 需要手动设置时区的命令行   &lt;br /&gt;
支持Wifi连接，如果上不去网需手动修改系统的连接配置文件   &lt;br /&gt;
不支持VPN，蓝牙连接以及个人热点功能，还不能打开飞行模式   &lt;br /&gt;
仅支持GSM网络，不支持CDMA网络以及LTE网络   &lt;br /&gt;
并不支持移动数据上网，仅仅可以通过Wifi联网   &lt;br /&gt;
不支持紧急呼叫，锁定SIM卡的PIN，缺少SIM卡的文件系统的支持   &lt;br /&gt;
没有免提电话功能，不能发送短信&lt;/p&gt;
&lt;/blockquote&gt;

 &lt;p&gt;  &lt;strong&gt;Ubuntu手机版ROM的   &lt;a href="http://www.36kr.com/p/200488.html"&gt;主要功能&lt;/a&gt;有：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
  &lt;p&gt;全手势操作，不需要锁屏界面    &lt;br /&gt;
全局搜索功能    &lt;br /&gt;
可视化数据展现，桌面 Widget显示统计信息   &lt;br /&gt;
 直接兼容HTML5 WebApps   &lt;br /&gt;
滑动屏幕即可搜索，或分类查看应用、联系人、音乐、视频列表   &lt;br /&gt;
智能的统一消息栏，有新消息送达时，从屏幕顶部滑下即唤出消息栏   &lt;br /&gt;   &lt;br /&gt;
UbuntuOne 云服务    &lt;br /&gt;
支持 Dock 底座，连接大屏幕运行桌面应用&lt;/p&gt;
&lt;/blockquote&gt;

 &lt;p&gt;  &lt;strong&gt;Ubuntu平板ROM的   &lt;a href="http://www.36kr.com/p/201426.html"&gt;主要功能&lt;/a&gt;有：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
  &lt;p&gt;多任务运行 “Side Stage” ，类似于 Windows 8应用程序的停靠功能    &lt;br /&gt;
访客模式 “Safer Sharing”，和桌面电脑一样，可以共享使用    &lt;br /&gt;
语音控制 HUD   &lt;br /&gt;
强大的搜索和丰富的线上内容    &lt;br /&gt;
社会化分享和云服务集成 边缘滑动操作   &lt;br /&gt;
可运行桌面应用程序，甚至是虚拟机运行其他操作系统&lt;/p&gt;
&lt;/blockquote&gt;

 &lt;p&gt;喜欢尝鲜的Galaxy Nexus、Nexus 4、Nexus 7和Nexus10机友们不妨试试看，  &lt;a href="http://cdimage.ubuntu.com/ubuntu-touch-preview/quantal/mwc-demo/"&gt;下载地址&lt;/a&gt;&lt;/p&gt;

 &lt;p&gt;  &lt;strong&gt;视频演示：&lt;/strong&gt;  &lt;br /&gt;
&lt;/p&gt;除非注明，本站文章均为原创或编译，转载请注明： 文章来自  &lt;a href="http://www.36kr.com/"&gt;36氪&lt;/a&gt; &lt;hr&gt;&lt;/hr&gt;
 &lt;p&gt;  &lt;a href="http://www.36kr.com/p/201073.html?ref=kr_post_feed"&gt;36氪官方iOS应用正式上线，支持『一键下载36氪报道的移动App』和『离线阅读』&lt;/a&gt;   &lt;a href="https://itunes.apple.com/cn/app/36ke/id593394038?l=en&amp;mt=8" target="_blank"&gt;立即下载！&lt;/a&gt;&lt;/p&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/42548-ubuntu-%E7%A7%BB%E5%8A%A8-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F</guid>
      <pubDate>Fri, 22 Feb 2013 01:43:57 CST</pubDate>
    </item>
    <item>
      <title>Firefox、Ubuntu如何突破iOS/Android垄断？</title>
      <link>https://itindex.net/detail/42520-firefox-ubuntu-%E7%AA%81%E7%A0%B4</link>
      <description>当下的智能手机及平板电脑操作系统市场，已逐渐被iOS跟Android垄断。
 &lt;br /&gt;
 &lt;br /&gt;诺基亚去年第4季财报也宣布停止发展塞班，三星虽接收英特尔的MeeGo并将与三星自有的Bada融合，但也好几个月连假性利多消息都没发布，BlackBerry OS还在困顿中，Windows Phone虽高度受关注，但实际市场表现仍远远待强化。
 &lt;br /&gt;
 &lt;br /&gt;所以，没有新的移动操作系统能进入市场了吗？答案为否，眼前就有2个尝试以独特价值诉求切入市场的行动作业系统，即Firefox OS与Ubuntu Phone，以下分别说明。
 &lt;br /&gt;
 &lt;br /&gt; &lt;div&gt;  &lt;img src="http://dl.iteye.com/upload/attachment/0080/6529/eb060130-a247-3f82-80e4-dae75e2cc5f9.jpg"&gt;&lt;/img&gt;&lt;/div&gt;
 &lt;br /&gt;
 &lt;br /&gt; &lt;strong&gt;Firefox OS&lt;/strong&gt;
 &lt;br /&gt;
 &lt;br /&gt;Firefox OS（前称为Boot to Gecko，B2G）是一个完全以Web技术标准及执行环境为基础的行动作业系统，应用程序可使用HTML5、CSS3等标准去建构程序画面，而程序语言方面则用网页程序常用的JavaScript，负责呈现程序画面与执行程序逻辑的是Gecko引擎，也就是Firefox浏览器的HTML/CSS排版引擎兼JavaScript执行引擎。
 &lt;br /&gt;
 &lt;br /&gt;说白了，就是一切都在浏览器内执行、呈现。
 &lt;br /&gt;
 &lt;br /&gt;Firefox OS还提供一套Web API（应用程序介面），供开发应用程序的程序设计师呼叫、呼用，透过这套API，可以让Firefox OS的应用程序对手机的硬体进行互通及操控，例如开关Wi-Fi、接收蓝牙传输，感应NFC、使用麦克风等。
 &lt;br /&gt;
 &lt;br /&gt;Firefox OS标榜一切都在网页内操作执行，但这不是很稀奇，以前2009年Palm提出的webOS及2001年阿里云计算（属于阿里巴巴集团）的变种Android作业系统阿里云OS（Aliyun OS）也都同样标榜全网页型手机应用程序。
 &lt;br /&gt;
 &lt;br /&gt;Firefox OS期望用很低的硬体需求，在不倚赖电信绑约的补贴下，能以100美元价位卖到拉丁美洲市场，未来甚至到50美元。
 &lt;br /&gt;
 &lt;br /&gt;此外，Firefox OS对应的线上应用程序商店Mozilla Marketplace欢迎程序开发者自行向终端消费者收费，也欢迎更多软体通路商、电信商自行成立线上商店，同时程序上架规则、订价规则、拆帐规则都不设限，以此挑战现有偏垄断性的Apple App Store、Google Play。
 &lt;br /&gt;
 &lt;br /&gt; &lt;strong&gt;Ubuntu Phone&lt;/strong&gt;
 &lt;br /&gt;
 &lt;br /&gt;Ubuntu Phone是将Ubuntu Linux直接移植到手机上，类似直接把笔记本电脑、台式机的Windows 7改在手机内执行。
 &lt;br /&gt;
 &lt;br /&gt;与Windows Phone、iPhone相比，Ubuntu Linux拥有一致性，手机跟电脑分别使用2套操作系统，可说是Microsoft、Apple的痛处。
 &lt;br /&gt;
 &lt;br /&gt;当然，手机的硬体资源、运算力、画面吋数都不如笔电，但却愈来愈逼近，今日双核、四核手机愈来愈多，画面吋数与解析度都在拉高，加上Linux本来就比较轻量，比较不耗硬体资源与运算力，因此用手机执行Ubuntu Linux具可行性。
 &lt;br /&gt;
 &lt;br /&gt;更重要的是，Ubuntu for Android可以与Android同时并存，一支手机既可以执行Android应用程序，也可以执行Ubuntu Linux应用程序，这是因为Android的底层也是Linux，Ubuntu for Android是在手机上内仅执行一套Linux，但该套Linux同时提供Android与Ubuntu来呼用它。
 &lt;br /&gt;
 &lt;br /&gt;Ubuntu期望做到手机接上键盘滑鼠后，可以变得跟一般电脑没两样，回到Ubuntu Linux的本态（或可称为Ubuntu PC），改接电视后变成Ubuntu TV，事实上Google TV也来自Android，成了电脑、电视、手机三合一。
 &lt;br /&gt;
 &lt;br /&gt;Via  &lt;a href="http://wired.tw/2013/02/08/firefox-os-ubuntu-phone/index.html" target="_blank"&gt;wired&lt;/a&gt; &amp;amp;  &lt;a href="http://www.huxiu.com/article/10373/1.html" target="_blank"&gt;虎嗅网&lt;/a&gt;
           &lt;br /&gt; &lt;br /&gt;
          感谢  &lt;a href="http://wnoum.iteye.com"&gt;WnouM&lt;/a&gt; 投递这篇资讯
                     &lt;br /&gt; &lt;br /&gt;资讯来源： &lt;a href="http://wired.tw/2013/02/08/firefox-os-ubuntu-phone/index.html" target="_blank"&gt;wired.tw&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt;
          
             &lt;a href="http://www.iteye.com/news/27191#comments"&gt;已有   &lt;strong&gt;0&lt;/strong&gt; 人发表留言，猛击-&amp;gt;&amp;gt;  &lt;strong&gt;这里&lt;/strong&gt;&amp;lt;&amp;lt;-参与讨论&lt;/a&gt;
          
           &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
ITeye推荐
 &lt;br /&gt;
 &lt;ul&gt;  &lt;li&gt;   &lt;a href="http://www.iteye.com/clicks/433" target="_blank"&gt;—软件人才免语言低担保 赴美带薪读研！— &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
 &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
          
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/42520-firefox-ubuntu-%E7%AA%81%E7%A0%B4</guid>
      <pubDate>Wed, 20 Feb 2013 17:56:03 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu 平板界面到来：特性、蓝图与现实</title>
      <link>https://itindex.net/detail/42505-ubuntu-%E5%B9%B3%E6%9D%BF-%E7%95%8C%E9%9D%A2</link>
      <description>&lt;p&gt;  &lt;div&gt;
                   &lt;a href="http://www.geekpark.net/user/home/index/154695" target="_blank"&gt;    &lt;img alt="&amp;#20316;&amp;#32773;&amp;#22836;&amp;#20687;" src="http://www.geekpark.net/uploads/o/v/n/z/d/ovnzdk2565468404/ovnzdk2565468404_30_30.png?1361332791"&gt;&lt;/img&gt;&lt;/a&gt;
                   &lt;div&gt;
                        &lt;div&gt;
                        作者：     &lt;a href="http://www.geekpark.net/user/home/index/154695" target="_blank"&gt;Carlos_Gong&lt;/a&gt;      &lt;em&gt;/&lt;/em&gt; 产品观察家
                    &lt;/div&gt;
                        &lt;div&gt;Just trolling :-) 邮箱：gxy@geekpark.net&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
              &lt;div&gt;
                   &lt;strong&gt;[核心提示]&lt;/strong&gt;Ubuntu 完成了桌面、手机和平板的布局，并且三者之间在特定条件下可以相互转化。然而蓝图固然美好，现实却已然严峻。
            &lt;/div&gt;&lt;/p&gt; &lt;blockquote&gt;
  &lt;p&gt;我们为所有设备提供一致的操作体验，而平板是我们的下一个目标。&lt;/p&gt;
  &lt;p&gt;——Mark Shuttleworth，Ubuntu 项目创始人，&lt;/p&gt;
&lt;/blockquote&gt;
 &lt;p&gt;  &lt;a href="http://www.geekpark.net/read/view/172873"&gt;HTC 要抢在月底 MWC 大会之前发布新旗舰手机&lt;/a&gt;，而 Canonical 则需要抢在 MWC 大会之前发布完毕新操作系统。于是在发布   &lt;a href="http://www.geekpark.net/read/view/169845"&gt;Ubuntu Phone &lt;/a&gt;之后不久的昨夜，他们发布了 Ubuntu 的平板操作系统界面。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" height="298" src="http://www.geekpark.net/uploads/reading/seed/0dbbb43f60333fbf2e6672fdf0aaa9e8.png" width="508"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;  &lt;a href="http://www.ubuntu.com/devices/tablet"&gt;根据官网的描述&lt;/a&gt;，平板版本的 Ubuntu 与手机版本共用一套系统和大部分代码，而只是根据不同的屏幕尺寸和场景状况使用不同的优化界面。&lt;/p&gt;
 &lt;h2&gt;主要特性&lt;/h2&gt;
 &lt;p&gt;这一优化界面的主要特性如下：&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;p&gt;（  &lt;a href="http://v.youku.com/v_show/id_XNTE2NDAyNjQw.html"&gt;不支持 Flash 的设备用户请猛击这里查看&lt;/a&gt;）&lt;/p&gt;
 &lt;div&gt;
  &lt;h3&gt;多任务并行操作——平板与手机界面的同屏共存&lt;/h3&gt;
  &lt;p&gt;作为一个完全多任务的操作系统，Ubuntu 的平板界面允许两个应用以同屏贴靠的方式并行运作：&lt;/p&gt;
  &lt;p&gt;   &lt;img alt="" height="363" src="http://www.geekpark.net/uploads/reading/seed/7d258238407a8799142ba907acd33985.png" width="465"&gt;&lt;/img&gt;&lt;/p&gt;
  &lt;p&gt;Ubuntu 的手机和平板采用的是同一套操作系统，因此实际上在同屏贴靠时，占有多数屏幕空间的应用显示的是平板版本界面，而占有少数屏幕空间的那个应用显示的是手机版本界面。&lt;/p&gt;
  &lt;p&gt;而在运行全屏应用时，各种信息的查看和回复操作也可以通过手势操作唤出和收起，并不会打断正常的操作任务和工作流。&lt;/p&gt;
  &lt;h3&gt;手势操作与无按键设计&lt;/h3&gt;
  &lt;p&gt;   &lt;a href="http://www.geekpark.net/read/view/169845"&gt;我们曾经详细介绍了 Ubuntu Phone 的手势操作&lt;/a&gt;，这样的方式在平板界面中得到了继承和梳理。Ubuntu 平板界面采用无按键设计，通过从屏幕的四边向内滑动来进行操作。&lt;/p&gt;
  &lt;p&gt;   &lt;img alt="" height="364" src="http://www.geekpark.net/uploads/reading/seed/8d8092dcd0e3cb0473a37d66fc1010f9.png" width="512"&gt;&lt;/img&gt;&lt;/p&gt;
  &lt;p&gt;与 Ubuntu Phone 时期略显混乱的操作逻辑相比，Ubuntu 平板界面的操作逻辑就被梳理得比较简单了。在介绍视频中，Ubuntu 项目创始人 Mark Shuttleworth 这样介绍从四边滑入屏幕时各自的功能：&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;左侧滑入：常用应用面板&lt;/li&gt;
   &lt;li&gt;右侧滑入：开启多任务贴靠并行操作&lt;/li&gt;
   &lt;li&gt;上方滑入：各种系统级功能和开关&lt;/li&gt;
   &lt;li&gt;下方滑入：应用本身的各种功能操作&lt;/li&gt;
&lt;/ul&gt;
  &lt;h3&gt;语音控制——平板上的 HUD 菜单&lt;/h3&gt;
  &lt;p&gt;   &lt;a href="http://www.geekpark.net/read/view/157651"&gt;通过搜索实时呈现结果的 HUD 菜单是桌面版 Ubuntu 的主要特性之一&lt;/a&gt;，而现在它也被带到了平板界面上，在不便输入的平板上，它的实现方法是——直接进行语音搜索。&lt;/p&gt;
  &lt;p&gt;   &lt;img alt="" height="340" src="http://www.geekpark.net/uploads/reading/seed/66c6c54850c573113ddeafc68c33709c.png" width="478"&gt;&lt;/img&gt;&lt;/p&gt;
  &lt;h3&gt;平板与桌面的转换&lt;/h3&gt;
  &lt;p&gt;在给 10 寸以上的平板接上鼠标和键盘之后，Ubuntu 系统将会自动从平板界面转向桌面界面，并实现所有功能的无缝转换与衔接。&lt;/p&gt;
  &lt;h3&gt;其它特性&lt;/h3&gt;
  &lt;ul&gt;
   &lt;li&gt;访客模式功能，支持多用户共同登入和使用。&lt;/li&gt;
   &lt;li&gt;方便的分享与云存储整合。和 Android 一样，Ubuntu 拥有系统级的分享机制。Ubuntu One 云存储也得到了良好的整合。&lt;/li&gt;
   &lt;li&gt;全景搜索。平板版本的内置搜索界面对上百个结果来源进行整合与组织，给出最舒适的结果呈现。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;h2&gt;蓝图与现实&lt;/h2&gt;
 &lt;p&gt;根据 Ubuntu 官网的介绍，平板界面支持的尺寸从 7 寸一直到 20 寸以上。至此，Ubuntu 完成了桌面、手机和平板的布局，并且三者之间在特定条件下可以相互转化。&lt;/p&gt;
 &lt;p&gt;然而蓝图固然美好，现实会怎样却很难说。到目前为止依然没有厂商公开宣布在自己的手机和平板产品中搭载 Ubuntu 操作系统，而 Ubuntu 的这个平板系统本身，也是存在不少问题的。&lt;/p&gt;
 &lt;p&gt;  &lt;img alt="" height="451" src="http://www.geekpark.net/uploads/reading/seed/7e32edc51446445d87fccae01b781d51.png" width="473"&gt;&lt;/img&gt;&lt;/p&gt;
 &lt;p&gt;一个最简单的例子是，作为最大亮点首先介绍的两个应用同屏贴靠显示功能，实际实现方式是一个应用处于手机界面模式，另一个应用处于平板界面模式。然而这样的条件要求应用必须完全为 Ubuntu 开发，同时具有平板和手机优化版界面，才可以正常完成贴靠操作——很明显，对于一个远未达到上市水平的系统来说，能愿意仔细满足这样要求的第三方开发者将是非常少的。&lt;/p&gt;
 &lt;p&gt;Ubuntu 平板和手机的测试产品都将在月底的 MWC 展会上出现，而 Nexus 7 和 Nexus 10 的刷机包也即将放出。极客公园团队已经准备好了 Galaxy Nexus 和 Nexus 7，并将于第一时间对手机版和平板版 Ubuntu 进行产品评测。敬请期待。&lt;/p&gt; &lt;p&gt;极客观察均为极客公园原创报道，转载请注明原文链接。&lt;/p&gt; &lt;p&gt;原文地址：  &lt;a href="http://www.geekpark.net/read/view/172878"&gt;http://www.geekpark.net/read/view/172878&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;关注极客公园，即时获得最新内容：  &lt;a href="https://twitter.com/geekparknet"&gt;Twitter&lt;/a&gt; |   &lt;strong&gt;微信：极客公园&lt;/strong&gt; |   &lt;a href="http://weibo.com/geekpark"&gt;新浪微博&lt;/a&gt; |   &lt;a href="http://huaban.com/geekpark"&gt;花瓣网&lt;/a&gt; |   &lt;a href="http://zhan.renren.com/geekpark"&gt;人人小站&lt;/a&gt; |   &lt;a href="https://plus.google.com/117900237066383009895"&gt;Google+&lt;/a&gt; |   &lt;a href="http://geekparknet.diandian.com"&gt;点点&lt;/a&gt;&lt;/p&gt; &lt;img src="http://img.tongji.linezing.com/2980686/tongji.gif"&gt;&lt;/img&gt;
        &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/42505-ubuntu-%E5%B9%B3%E6%9D%BF-%E7%95%8C%E9%9D%A2</guid>
      <pubDate>Wed, 20 Feb 2013 07:16:18 CST</pubDate>
    </item>
    <item>
      <title>第三方力量：Ubuntu将于2月21日登录Nexus手机</title>
      <link>https://itindex.net/detail/42364-%E5%8A%9B%E9%87%8F-ubuntu-%E7%99%BB%E5%BD%95</link>
      <description>&lt;p&gt;如果你是刷机爱好者，下周会有一个圈新的玩具供你折腾。Canonical宣布，手机版的Ubuntu 13.10操作系统的开发者预览版将于本月21日正式放出，首批支持的手机包括Galaxy Nexus和Nexus 4。&lt;/p&gt;
 &lt;p&gt;
&lt;/p&gt; &lt;p align="center"&gt;  &lt;a href="http://img.evolife.cn/2013-02/07f513dacd25bfb9.jpg" target="_blank" title="&amp;#31532;&amp;#19977;&amp;#26041;&amp;#21147;&amp;#37327;&amp;#65306;Ubuntu&amp;#23558;&amp;#20110;2&amp;#26376;21&amp;#26085;&amp;#30331;&amp;#24405;Nexus&amp;#25163;&amp;#26426;"&gt;   &lt;img alt="&amp;#31532;&amp;#19977;&amp;#26041;&amp;#21147;&amp;#37327;&amp;#65306;Ubuntu&amp;#23558;&amp;#20110;2&amp;#26376;21&amp;#26085;&amp;#30331;&amp;#24405;Nexus&amp;#25163;&amp;#26426;" src="http://img.evolife.cn/2013-02/07f513dacd25bfb9_thumb.jpg"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;p&gt;作为安卓、苹果、Windows Phone乃至黑莓、bada之外的第六个竞争者，Ubuntu倒是很有一番雄心。Ubuntu认为自己在移动设备上的优势是无缝衔接性——不管是手机、智能电视、平板甚至是电脑，只要运行的是Ubuntu操作系统，程序均由Qt/QML平台开发，它们之间将无缝兼容。&lt;/p&gt;
 &lt;p&gt;不过，专门的Ubuntu程序实在是太少了，所以Canonical首先放出的也只是开发者预览版Ubuntu，官方预计第一台搭载Ubuntu系统的手机要等到今年10月份才有机会诞生。在那之前，安卓、苹果和Windows Phone将会再度往前迈进很多版本，我们只能祝Ubuntu好运了。&lt;/p&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/42364-%E5%8A%9B%E9%87%8F-ubuntu-%E7%99%BB%E5%BD%95</guid>
      <pubDate>Sat, 16 Feb 2013 04:14:06 CST</pubDate>
    </item>
    <item>
      <title>Ubuntu Phone OS究竟有何特别？</title>
      <link>https://itindex.net/detail/41576-ubuntu-phone-os</link>
      <description>  移动领域已经有了iOS、Android、Windows Phone、黑莓、Jolla、WebOS、Firefox OS和Tizen操作系统，前四家统治了整个市场，后四位还是羽毛未丰的后起之秀。现在，移动市场又多了一位前景不明的选手：Canonical刚刚宣布了它的移动操作系统Ubuntu Phone OS，并试图模仿Windows 8创造一种横跨手机、平板和桌面的操作系统。但它究竟有什么特别之处能在众多的竞争对手中脱颖而出？ Ubuntu Phone手机计划于2013年底或2014年初推出。入门级硬件需要1Ghz Cortex A9和512MB到1GB内存，高端硬件需要4核A9或Intel Atom 处理器，以及至少1GB内存。它将使用Android内核和驱动以兼容现有的硬件，但不使用Java虚拟机，UI层是基于QML，支持原生和Web应用。2014年4月发布的Ubuntu 14.04的镜像将同时工作在手机平板和桌面上。Canonical创始人Mark Shuttleworth称，Ubuntu的独特之处是融合手机和桌面PC，手机用户获得完整的PC功能，而开发者向Ubuntu Software Centre递交的应用如果兼容手机和桌面，则可以同时在两个平台发行。Shuttleworth说，Ubuntu的另一大优势是最近几年游戏发行商Valve和开发商Unity正开始针对Ubuntu发行和开发游戏。虽然Ubuntu和Android都是开源系统，但Canonical表示其开发流程将会更透明开放。 &lt;img border="0" height="1" src="http://solidot.org.feedsportal.com/c/33236/f/556826/s/27280c12/mf.gif" width="1"&gt;&lt;/img&gt; &lt;div&gt;  &lt;table border="0"&gt;   &lt;tr&gt;    &lt;td valign="middle"&gt;     &lt;a href="http://share.feedsportal.com/viral/sendEmail.cfm?lang=en&amp;title=Ubuntu+Phone+OS%E7%A9%B6%E7%AB%9F%E6%9C%89%E4%BD%95%E7%89%B9%E5%88%AB%EF%BC%9F&amp;link=http%3A%2F%2Fwww.solidot.org%2Fstory%3Fsid%3D32935" target="_blank"&gt;      &lt;img border="0" src="http://res3.feedsportal.com/images/emailthis2.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td valign="middle"&gt;     &lt;a href="http://res.feedsportal.com/viral/bookmark.cfm?title=Ubuntu+Phone+OS%E7%A9%B6%E7%AB%9F%E6%9C%89%E4%BD%95%E7%89%B9%E5%88%AB%EF%BC%9F&amp;link=http%3A%2F%2Fwww.solidot.org%2Fstory%3Fsid%3D32935" target="_blank"&gt;      &lt;img border="0" src="http://res3.feedsportal.com/images/bookmark.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt; &lt;br /&gt; &lt;br /&gt; &lt;a href="http://da.feedsportal.com/r/152264862359/u/49/f/556826/c/33236/s/27280c12/a2.htm"&gt;  &lt;img border="0" src="http://da.feedsportal.com/r/152264862359/u/49/f/556826/c/33236/s/27280c12/a2.img"&gt;&lt;/img&gt;&lt;/a&gt; &lt;img border="0" height="1" src="http://pi.feedsportal.com/r/152264862359/u/49/f/556826/c/33236/s/27280c12/a2t.img" width="1"&gt;&lt;/img&gt; &lt;div&gt;
  &lt;a href="http://feeds.feedburner.com/~ff/solidot?a=Xnbo-FM8_gk:ltT_uR0OFnk:yIl2AUoC8zA"&gt;   &lt;img border="0" src="http://feeds.feedburner.com/~ff/solidot?d=yIl2AUoC8zA"&gt;&lt;/img&gt;&lt;/a&gt;   &lt;a href="http://feeds.feedburner.com/~ff/solidot?a=Xnbo-FM8_gk:ltT_uR0OFnk:7Q72WNTAKBA"&gt;   &lt;img border="0" src="http://feeds.feedburner.com/~ff/solidot?d=7Q72WNTAKBA"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/41576-ubuntu-phone-os</guid>
      <pubDate>Thu, 03 Jan 2013 22:20:57 CST</pubDate>
    </item>
  </channel>
</rss>

