<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/assets/xslt/rss.xslt" ?>
<?xml-stylesheet type="text/css" href="/assets/css/rss.css" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Blog of iNK</title>
		<description>这是墨水的个人博客。</description>
		<link>https://inkpool.github.io/</link>
		<atom:link href="https://inkpool.github.io/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>KVMGT配置教程</title>
				<link>https://inkpool.github.io/study/setup_guide_of_kvmgt/</link>
				<pubDate>Thu, 10 Mar 2016 00:00:00 +0000</pubDate>
				<description>&lt;p&gt;GVT-g作为Intel的GPU虚拟化解决方案中的重头角色，势必是要吸引千万目光的（广告打的有点厉害）。与此同时，KVM现在已经占了虚拟化方案的90%以上份额（别的还有Xen、vMWare、Hyper-V），就连我一个还算不上Xen开发者的搬砖工人都觉得，要改投门派了。Intel的GVT-g一开始的时候是在Xen上实现的，也就是XenGT。XenGT现在已经很稳定了，支持从Sandy Bridge到Haswell再到Broadwell再到Skylake的Intel Graphics HD。由于KVM的开源和巨大潜力，在XENGT之后，Intel也在把GVT-g的实现往KVM上搬，也就是KVMGT。KVMGT和XENGT的主逻辑和原理相同，两者共享90%的代码。现如今官方已经把XENGT和KVMGT整合到了一起，在GitHub上的项目叫&lt;a href=&quot;https://github.com/01org/Igvtg-kernel&quot;&gt;iGTV-g&lt;/a&gt;，原来的&lt;a href=&quot;https://github.com/01org/KVMGT-kernel&quot;&gt;KVMGT&lt;/a&gt;项目代码已经停止更新。&lt;/p&gt;

&lt;p&gt;本文主要讲解GVT-g针对KVM的配置，主要分为四个步骤：编译内核、编译Qemu、配置宿主机环境、 部署客户机。&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;1 编译内核&lt;/h2&gt;

&lt;h3 id=&quot;section-1&quot;&gt;1.1 环境准备&lt;/h3&gt;
&lt;p&gt;你需要一台装有Intel GPU的电脑，具体来讲，你的电脑需要拥有Sandy Bridge、HASWELL、Broad Well或者Sky Lake中任意一代集成有Intel Graphics HD的CPU。我个人用的是Haswell，也是目前市面上最主流的平台。除了CPU之外，别的并没有特殊要求，内存和硬盘自然是越大/越快越好。另外，装了独立显卡的同学先把独立显卡拆了…&lt;/p&gt;

&lt;p&gt;根据XenGT的经验，我个人推荐使用Ubuntu系统来使用KVMGT，特别推荐使用12.04和14.04，本文用的是14.04.1。&lt;/p&gt;

&lt;h3 id=&quot;section-2&quot;&gt;1.2 安装依赖&lt;/h3&gt;
&lt;p&gt;安装编译和以后使用过程中所需要的依赖：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# apt-get install libarchive-dev libghc-bzlib-dev zlib1g-dev mercurial gettext bcc iasl uuid-dev libncurses5-dev kpartx libegl1-mesa-dev libudev-dev libperl-dev libgtk2.0-dev libc6-dev-i386 libaio-dev  libsdl1.2-dev  nfs-common libyajl-dev libx11-dev autoconf libtool xsltproc bison flex xutils-dev x11proto-gl-dev libx11-xcb-dev libxcb-glx0 libxcb-glx0-dev libxcb-dri2-0-dev libxcb-xfixes0-dev bridge-utils python-dev bin86 git vim libssl-dev libpci-dev tightvncserver ssh texinfo mesa-utils ocaml-findlib liblcms-utils vim-addon-manager metacity nautilus openssh-server cgvg socat uml-utilities -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;section-3&quot;&gt;1.3 编译安装内核&lt;/h3&gt;

&lt;p&gt;在&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/initramfs-tools/modules&lt;/code&gt;里加上两行：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;xengt
kvm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;然后照下面的步骤编译：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# git clone https://github.com/01org/igvtg-kernel kernel_src
# cd kernel_src/
# git checkout 2015q3-3.18.0
# cp config-3.18.0-host .config
# make -j8 &amp;amp;&amp;amp; make modules_install
# mkinitramfs -o /boot/initrd.img -v 3.18.0-rc7-vgt-2015q3+
# cp arch/x86/boot/bzImage /boot/vmlinuz-3.18.0
# cp vgt.rules /etc/udev/rules.d
# chmod a+x vgt_mgr
# cp vgt_mgr /usr/bin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;这里的&lt;code class=&quot;highlighter-rouge&quot;&gt;3.18.0-rc7-vgt-2015q3+&lt;/code&gt;与&lt;code class=&quot;highlighter-rouge&quot;&gt;/lib/modules/&lt;/code&gt;目录下面的模块版本号匹配。&lt;/p&gt;

&lt;h2 id=&quot;qemu&quot;&gt;2 编译Qemu&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# git clone https://github.com/01org/igvtg-qemu -b kvmgt_public2015q3 qemu_src
# cd qemu_src/
# git submodule update --init dtc
# git submodule update --init roms/seabios
# ./configure --prefix=/usr --enable-kvm --disable-xen 
--enable-debug-info --enable-debug --enable-sdl --enable-vhost-net 
--disable-debug-tcg --target-list=x86_64-softmmu
# make -j8
# cd roms/seabios
# make -j8
# cd -
# make install
# cp ./roms/seabios/out/bios.bin /usr/bin/bios.bin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-4&quot;&gt;3 配置宿主机环境&lt;/h2&gt;

&lt;h3 id=&quot;section-5&quot;&gt;3.1 创建客户机网络脚本&lt;/h3&gt;

&lt;p&gt;创建&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/qemu-ifup&lt;/code&gt;文件，并写入以下内容：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; -x
&lt;span class=&quot;nv&quot;&gt;switch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;brctl show| sed -n 2p |awk &lt;span class=&quot;s1&quot;&gt;&#39;{print $1}&#39;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; -n &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;;&lt;span class=&quot;k&quot;&gt;then
  &lt;/span&gt;tunctl -u &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;whoami&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt; -t &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;
  ip link &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt; up
  sleep 0.5s
  brctl addif &lt;span class=&quot;nv&quot;&gt;$switch&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;0
&lt;span class=&quot;k&quot;&gt;else
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Error: no interface specified&quot;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;1
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;设置该文件的权限为755，即可运行：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;chomd 755 /etc/qemu-ifup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;这个文件在启动虚拟机的时候会用到，这里我们先把它准备好。&lt;/p&gt;

&lt;h3 id=&quot;grub&quot;&gt;3.2 添加grub项&lt;/h3&gt;

&lt;p&gt;打开&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/grub.d/40_custom&lt;/code&gt;文件，将以下内容复制到&lt;code class=&quot;highlighter-rouge&quot;&gt;exec tail -n +3 $0&lt;/code&gt;这句的下面：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;menuentry &#39;Ubuntu-kvmgt&#39; --class kvmgt --class gnu-linux --class gnu --class os $menuentry_id_option &#39;gnulinux-simple-21427147-a567-47e7-8ba7-3bd8d4c5bc75&#39; {
  recordfail
  load_video
  gfxmode $linux_gfx_mode
  insmod gzio
  insmod part_msdos
  insmod ext2
  set root=&#39;hd0,msdos1&#39;
  if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 11427147-a567-47e7-8ba7-3bd8d4c5bc75
  else
  search --no-floppy --fs-uuid --set=root 11427147-a567-47e7-8ba7-3bd8d4c5bc75
  fi
  linux /boot/vmlinuz-3.14.1-igvt+ root=UUID=11427147-a567-47e7-8ba7-3bd8d4c5bc75 ro intel_iommu=igfx_off i915.hvm_boot_foreground=1 log_buf_len=128M
  initrd /boot/initrd-3.14.1-igvt+.img
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;请参照&lt;code class=&quot;highlighter-rouge&quot;&gt;/boot/grub/grub.cfg&lt;/code&gt;里面你已有的grub项，然后修改上40_custom刚刚复制进去的内容。&lt;code class=&quot;highlighter-rouge&quot;&gt;11427147-a567-47e7-8ba7-3bd8d4c5bc75&lt;/code&gt;改成你自己的UUID，你自己的UUID从&lt;code class=&quot;highlighter-rouge&quot;&gt;grub.cfg&lt;/code&gt;里面找。&lt;code class=&quot;highlighter-rouge&quot;&gt;root=&#39;hd0,msdos1&#39;&lt;/code&gt;这个如果有需要的话，根据你自己的情况改，具体改成什么样子参照你的grub.cfg。&lt;/p&gt;

&lt;p&gt;接下来修改grub的选项菜单时间，打开&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/default/grub&lt;/code&gt;，将&lt;code class=&quot;highlighter-rouge&quot;&gt;GRUB_HIDDEN_TIMEOUT= 0&lt;/code&gt;改成你想要grub选单停留的时长，这里我改为5。&lt;/p&gt;

&lt;p&gt;在添加过grub选项，修改过grub选单停留时间后，更新grub。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#update-grub
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;此时再打开&lt;code class=&quot;highlighter-rouge&quot;&gt;/boot/grub/grub.cfg&lt;/code&gt;，可以看到刚刚我们的添加和修改都已经在里面了。（如果没有，请检查前面的配置）&lt;/p&gt;

&lt;p&gt;注：这一步在官方的文档里是直接在grub.cfg里新加项的，不过个人不建议这么做。因为系统更新的时候，会自动刷新grub.cfg的，从而导致我们添加的项失效。&lt;/p&gt;

&lt;p&gt;OK，重新启动系统，然后选择我们新加的Grub启动项&lt;code class=&quot;highlighter-rouge&quot;&gt;Ubuntu-kvmgt&lt;/code&gt;，成功进入系统就算成功了。&lt;/p&gt;

&lt;h2 id=&quot;section-6&quot;&gt;4 部署客户机&lt;/h2&gt;

&lt;h3 id=&quot;section-7&quot;&gt;4.1 创建桥接网络&lt;/h3&gt;

&lt;p&gt;在宿主机创建一个桥接网络，用来给宿主机分配ip。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#brctl addbr br0 
#brctl addif br0 eth0 
#ifconfig eth0 0 
#dhclient br0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;这里的eth0要根据具体情况来看，有些人可能是eth1等。&lt;/p&gt;

&lt;h3 id=&quot;section-8&quot;&gt;4.2 创建客户机镜像&lt;/h3&gt;

&lt;p&gt;首先我们还是要像普通的KVM虚拟机一样，先为虚拟机创建一个镜像，然后安装一个操作系统。这里与宿主机一致，我选择的是Ubuntu 14.04。如果你有一个纯净的Ubuntu 14.04的img你也可以拿来直接用。这一步我们在这里就省略了，可以参考一般KVM的客户机安装步骤。我的客户机镜像是ubuntu-14.04.img。&lt;/p&gt;

&lt;p&gt;注意：这一步的客户机镜像还没有KVMGT的功能，所以安装系统以及启动的过程中，Qemu都使用KVM的正常参数。例如：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/bin/qemu-system-x86_64 -m 2048 -smp 2 -hda /path/to/ubuntu-14.04.img -cdrom /path/to/ubuntu-14.04-install.iso
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;section-9&quot;&gt;4.3 更新客户机内核&lt;/h3&gt;

&lt;p&gt;要使用KVMGT我们需要更新客户机系统的内核，用我们在步骤1给宿主机编译的内核来替换客户机的内核。我们把img挂载到/mnt下面，然后替换其内核。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# modprobe loop
# kpartx -a -v /path/to/ubuntu-14.04.img
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;会出现类似这样的输出：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;add map loop0p1 (253:0): 0 29638656 linear /dev/loop0 2048
add map loop0p2 (253:1): 0 1075202 linear /dev/loop0 29642750
add map loop0p5 : 0 1075200 linear 253:1 2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;接着，把/loop0p1挂载到/mnt下面，然后把步骤1中新的内核拷贝进虚拟机：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mount /dev/mapper/loop0p1 /mnt/

# cp /boot/vmlinuz-3.18.0 /mnt/boot/
# cp /boot/initrd.img /mnt/boot/
# cp -r /lib/modules/3.18.0* /mnt/lib/modules

# umount /mnt
# kpartx -d -v /path/to/ubuntu-14.04.img
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;卸载掉img之后，接着给guest的grub.cfg也添加一个entry，参照第3.2步。&lt;/p&gt;

&lt;h3 id=&quot;section-10&quot;&gt;4.4 启动虚拟机&lt;/h3&gt;

&lt;p&gt;当我们替换好客户机的内核，并且为客户机添加过新的grub entry之后，就可以开启KVMGT的功能，然后启动虚拟机了。使用如下Qemu参数启动虚拟机：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# /usr/bin/qemu-system-x86_64 -m 2048 -smp 2 -enable-kvm -M pc -machine kernel_irqchip=on -bios /usr/bin/bios.bin -hda /path/to/Guest_OS.img -net nic -net tap,script=/etc/qemu-ifup -vgt -vga vgt -vgt_low_gm_sz 128  -vgt_high_gm_sz 384 -vgt_fence_sz 4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;注意：&lt;code class=&quot;highlighter-rouge&quot;&gt;-net tap,script=/etc/qemu-ifup&lt;/code&gt;是我们在步骤3.1创建的脚本。&lt;code class=&quot;highlighter-rouge&quot;&gt;-vgt -vga vgt -vgt_low_gm_sz 128  -vgt_high_gm_sz 384 -vgt_fence_sz 4&lt;/code&gt;这些参数都是KVMGT带进来的新参数，Low_gm_sz推荐128MB，High_gm_sz推荐384MB。&lt;/p&gt;

&lt;p&gt;Low_gm和High_gm这两个选项的最大值，具体所用的显卡和主板的限制有关。HASWELL处理器最多支持512MB的low_gm和1.5GB的high_gm，但是由于主板bios的限制，一般情况下low_gm只有256MB。同时，为了保证虚拟机的正常运行，一般我们给的配置是（128 low_gm + 384 high_gm）。
因此，KVMGT受限于Graphics Memory Space的大小（XENGT也是），HASWELL平台目前只支持4台虚拟机（包括Dom0在内）。&lt;/p&gt;

&lt;p&gt;如果客户机成功启动，并且自动全屏显示，那么就说明成功啦！&lt;/p&gt;

&lt;p&gt;要在虚拟机之间切换，可以使用下面的命令：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# echo 0 &amp;gt; /sys/kernel/vgt/control/foreground_vm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;这里的0是虚拟机的vm_id，0表示dom0也就是宿主机，往后的编号就是客户机。同样，你可以通过cat命令查看当前是哪个机器在前台（全屏占据着Display）。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cat /sys/kernel/vgt/control/foreground_vm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
				<guid isPermaLink="true">https://inkpool.github.io/study/setup_guide_of_kvmgt/</guid>
			</item>
		
			<item>
				<title>我的博客终于重新开张了</title>
				<link>https://inkpool.github.io/study/reborn_of_my_blog/</link>
				<pubDate>Sun, 28 Feb 2016 00:00:00 +0000</pubDate>
				<description>&lt;p&gt;终于，我的博客又上线了，这次应该可以老老实实写了。原来用WordPress搭的个人博客，后来由于VPS搬迁，备份的那些东西不知道被我丢哪儿去了，从此博客就不了了之。再后来，真要写些什么东西，就用QQ空间（TAT，我觉得QQ空间拿来写流水账其实挺好的，社交功能很好，受众都是朋友和家人）。&lt;/p&gt;

&lt;p&gt;OK，言归正传，讲讲为什么这次我选择了Jekyll+GitHub Pages这样一个组合。首先在选择个人博客方案的时候，我考虑了几个方面：可维护性、成本、简易性、稳定程度。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;可维护性&lt;br /&gt;
可维护性指的是博客迁移是否方便，如果要进行一些定制方不方便。为什么关心这个，是因为我的博客之前经常搬家。这段时间是用Blue Host，下一段时间可能就是Digital Ocean。当自己还是一个穷学生的时候（事实上现在还是，但是我现在不会买DO这种供应商了，要买自然是要Linode），手里需要一个VPS，价格又高，只有靠薅羊毛，哪里便宜买哪里，比如GitHub和DO的edu邮箱送100刀的活动。活动结束了，VPS就得搬家，博客也得跟着搬家。&lt;br /&gt;
过去用WordPress的时候，WordPerss自带的备份恢复功能还算好用。但是你WordPress总是得重新安装一下的，顺带的，LAMP环境又得来一发，不过现在很多VPS在创建的时候已经可以附带这样的环境了，所以还OK。
但是比起静态博客的可维护性，我觉得Wordpress还是差了点。静态博客直接打包备份一下就完事了。服务器不要维护，因为有GitHub Pages帮你维护。当然我也见过我不能理解的，用了Jekyll还非得用自己的VPS来host，可能是因为域名不够个性吧。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;成本&lt;br /&gt;
这个是我很关心，也应该是很多手头不充裕的同学关心的。除非遇到送钱的活动（上面提到的DO和Github的推广），普通情况下，一年还是得花个100-200块钱来买个VPS。为了体面点，我们还得买个域名，GoDaddy买个域名，一般是100不到一年。这只是第一年，第二年就不好说了，涨价或者翻倍都有可能。所以差不多如果自己维护VPS来host一个博客，成本差不多在200-300一年。&lt;br /&gt;
有些同学说在VPS上还可以搭个SS，以及一些其他服务，也算是在其他地方省点钱。但其实事实上不是这个样子的，100多快钱的VPS做ss实在是太慢了，以DO为例，弄个US西海岸的都在200ms以上，其他的节点我都不好意思举例子。那来个TCP双边加速的服务？收费的话一个月10-20块钱，免费的又麻烦死了，速度倒是还行，不怕麻烦的可以试试。真的用VPS又搭博客又做代理的同学，最后都会选择更好的VPS，比如Linode，这样算下来，博客的成本还是在200-300一年，甚至更高。&lt;br /&gt;
但是，如果用了GitHub Pages托管，这个费用就是0。不要钱的事情，不干白不干啊！这可能是最吸引我的特点了。节省出来的钱，爱干什么干什么，比如买一条别人维护的Linode日本科学上网线路。买个口碑好的，根本不需要自己买VPS来维护，省钱省事。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;简易性&lt;br /&gt;
从这点来说，我还是很喜欢Wordpress的，因为用起来真是简单，搭建完了用起来就像QQ空间（原谅我就是喜欢QQ空间）。Wordpress的功能也很强大，生态丰富，各种插件应有尽有，基本上你想的出来的功能，都可以折腾上去。&lt;br /&gt;
Jekyll这样的静态博客，那真的就不简易了。创建起来麻烦（但是迁移很简单），怎么也得懂一点点技能，比较Geek。写起来嘛，需要懂Markdown的语法，这点看个人，有些人说Markdown写起来简单，我边写还得边查语法…受静态网页的限制，Jekyll的功能就比较少了，不过因此带来的一个好处就是看起来很简洁。&lt;br /&gt;
所以没有网页基础的同学，用Jekyll还是挺吃力的（其他的静态博客方案同样吃力），我个人是推荐用QQ空间、新浪博客这样的第三方，或者自己摸索装个Wordpress。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;稳定性&lt;br /&gt;
我这里讲的稳定性，除了网站要一直能访问外，还有个访问速度的问题。先说说能不能访问的问题，GitHub因为一些众所周知的原因，曾经是有一段时间不能访问的。大多数同学用的国外VPS，在某些情况下，也是会出现不能访问的问题的。访问速度上，GitHub和国外的贵的VPS差不多，比差的VPS要好一些，但也好不了太多。所以这两类同学半斤八两。&lt;br /&gt;
最稳定的还是国内的第三方，或者把博客搭建在阿里云、腾讯云这样的平台上的。看最近阿里云学生专属活动做的也挺火爆的，可以很便宜的价格买个阿里云的VPS。不过依我的理解，用国内VPS去Host博客是不是会遇到一些审核上的问题？&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;说到这里，大家差不多能理解了我为什么选择Jekyll+GitHub Pages，也希望能帮助到在纠结选择博客方案的同学。置于搭建的方法，和具体用哪个模板，大家可以看看我的&lt;a href=&quot;https://inkpool.github.io/info/&quot;&gt;博客info页&lt;/a&gt;里面有我选择的方案的官网link，跟着文档做就成。&lt;/p&gt;
</description>
				<guid isPermaLink="true">https://inkpool.github.io/study/reborn_of_my_blog/</guid>
			</item>
		
			<item>
				<title>我与乐高</title>
				<link>https://inkpool.github.io/life/how_i_met_lego/</link>
				<pubDate>Sun, 28 Feb 2016 00:00:00 +0000</pubDate>
				<description>&lt;p&gt;我在博客的导航栏留了一个“乐高”的菜单，它不是一个category，而是一个tag。我的博客只有三个分类，所有关于乐高的文章应该属于“life”分类。我们可以通过如下简单的语句可以把以“lego”为tag的文章筛选出来，然后做成一个类似专栏的样子。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;site.tags.lego&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ site.url }}{{ post.url }}&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;post.title&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;endfor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;我小时候应该是玩过乐高的，当然也有可能是国产的山寨的乐高。对乐高的印象大概是simple building block，所以也没觉得有多大意思。直到去年去了一趟美帝，逛了一家乐高专卖店，才知道乐高也可以很复杂。再深入了解了一下，发现还是别有洞天的，自此一发不可收拾。&lt;/p&gt;

&lt;p&gt;翻了翻照片，找了几张在美帝去的那家乐高店拍的。这家店是在洛杉矶的迪士尼乐园的入口处，个人感觉是一个档次很高的分店，相比起我了解的其他店来说，应该算得上乐高店中4S店= =&lt;/p&gt;

&lt;p&gt;翻了翻旧照片，只找到几张在店里随手拍的照片。如果那时候知道要写这样的文章，我就认真拍几张照片了：&lt;br /&gt;
&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/1.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;
&lt;center&gt;拉丁神灯主题Set，悬挂在屋顶&lt;/center&gt;

&lt;p&gt;&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/2.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;
&lt;center&gt;一墙的Basic block，装满一杯子是9.9美金&lt;/center&gt;

&lt;p&gt;&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/3.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;
&lt;center&gt;可以看到星球大战系列&lt;/center&gt;

&lt;p&gt;&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/4.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;
&lt;center&gt;这个是晚上路过的时候才看到的，一直巨大的喷火龙在入口处&lt;/center&gt;

&lt;p&gt;当时在美帝乐高买了几个很简单的拼砌包和钥匙环，只送出去一个，还有剩下的都被自己给私藏了。秀一下我的第一个乐高，喷火龙，3.75美金的样子。&lt;br /&gt;
&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/5.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这一买就不可收拾了，后来开始关注国内的乐高社区，比如&lt;a href=&quot;http://www.lelezhen.com/portal.php&quot;&gt;乐乐镇&lt;/a&gt;。渐渐的手痒开始买一些Set，碰巧&lt;a href=&quot;http://www.smzdm.com&quot;&gt;什么值得买&lt;/a&gt;上也有很多值友关注乐高，经常可以看到打折信息。于是陆陆续续从淘宝、美亚、德亚、法亚买了一些Set。&lt;/p&gt;

&lt;p&gt;乐高每年新款发售很多，已有系列也是五花八门。其中最让我感兴趣的，还是乐高的TECHNIC系列，这个系列可以说满足了我这个对机械充满兴趣却专业不够的伪机械迷。TECHNIC的大多数Set都是从现实中的机器中改编而来，并且结构上做到了非常细致的还原。我个人真的是被迷得无法自拔，经常看着别人的晒单就欲罢不能。另外，乐高的StarWars星球大战系列，我也很喜欢。一来这是个情怀，星球大战这么多年经久不衰，粉丝无数，我也能勉强算个伪迷。二来，星球大战是个科幻题材，很多飞船实体化后非常迷人，也值得把玩。&lt;/p&gt;

&lt;p&gt;去年的黑五，趁着打折，也趁着心情低迷（心情差的时候，买买买可以缓解），一下子入手了乐高TECHNIC系列的几个旗舰。寒假里完成了一个Set，下一篇就打算写一下这个Set 43042。&lt;/p&gt;

&lt;p&gt;我这个年纪还玩乐高，其实很多人不能理解，包括我老爸老妈看我这么折腾，结果海淘回来的全是积木，也十分无语。但我还是那个态度，自己开心就好，就让别人去质疑吧…一方面我不屑于别人的冷眼，但另一方面其实我还是希望能给亲近的人分享我的快乐的，比如我的几个好朋友，我经常把拼好了的Set给他们秀，给他们体验。他们有时候还是很惊叹，也很开心的，不过他们最后一般会说一句类似“如果我有钱，我也买”这样的话，伤透我心。&lt;/p&gt;

&lt;p&gt;最后用我的猛虎斗恶龙来结尾…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://inkpool.github.io/images/how_i_met_lego/6.jpg&quot; alt=&quot;Picture description&quot; /&gt;&lt;/p&gt;

</description>
				<guid isPermaLink="true">https://inkpool.github.io/life/how_i_met_lego/</guid>
			</item>
		
	</channel>
</rss>
