e9卡片式电脑运行ubuntu 14.04.2

去年这个时候买了个e9卡片式电脑(主板资料), 主要是解决raspberry pi的性能太弱的问题,同 时看中了支持sata硬盘。我主要是用它来做服务器使用的。自带的ubuntu 12.04也基本满足 要求。

后来,我承载的服务越来越多,就想通过docker来简单部署了,但docker需要的内核至少是 3.10+的。这个板子的内核是3.0.35的,差好多。试着拉了一下代码。发现内核的arm版本在 这期间进行了大改动。增加了dts的方式。对于dts,我完全不了解。也不明白,据说是设计 板子用的。总之,学习需要很长的时间,对于我这种非设计的程序员而言,就像美术于我一 样。于是,我买了个pipo的x7,x86 64位架构,安装了个ubuntu的系统。就作为我的主服务 器了。而且,自动构建也是在这个里面通过docker来部署的。

这个e9卡片电脑就变成了我的心结了。时不时的找找资料,泡泡论坛,看是否有相关的进展。 后来,在论坛上看到有人说自己移植了3.10内核(帖子位置 )了。于是,就想在此基础上进行进一 步的开发。

代码我基本上就是从帖子中的地址(代码位置 )拖下来的。先测试编译。帖子中的问题也碰到过。 主要是卡在start kernel之后就没有了,这个问题很纠结。第一次碰到的时候也是这种状况, 完全不明白头绪。不过这次开发就相对有经验了。我在其他地方看到了相关的信息资 料(unbriking u-boot启动)当然,我主要是使用linux开发的,因此,使用 imx_usb_loader工具(imx_usb_loader) 即可。

简单而言,将板子设置为download模式,然后,在download的时候,通过usb_loader工具将 u-boot上传到板子中,并运行,这个要比默认用mfg的那个工具方便很多。要知道,使用那 个工具需要反复的跳线,长时间的烧。而且,必须所有的一起烧,苦不堪言啊。

总之,通过usb_loader工具,我可以单独测试u-boot了,但u-boot我也不太会用,不过,这 个就好用些了,想办法设置为网络启动,然后运行下,看到有请求网络上的内核,可以加载 相关文件,然后启动加载远程的rootfs了。这简直就是个无盘工作站啊。

默认的启动的是mmc,然后是netboot,我记得是这样子的。但我的mmc不想格式话,觉得还 是emmc比较方便,分析代码中的u-boot的设置的环境信息,以及老的相关信息脚本。手动设 置运行。想了一个方案:

将自己定制的内核的zImage和dtb文件放到emmc的root分区的boot目录中,然后启动的时候, 加载这个文件,如果要升级内核的话,可以直接更新这些文件即可,也可以弄多份。

原因在于,mfg的那个工具,必须要有uImage文件,而我们编译出来的是zImage,虽然也可生 成uImage,但dtb文件总要有个地方存放。而我又不想弄的太复杂,于是还是简单些好。这 个就造成了在烧的时候使用一个从来不会用到的文件。

先上最终的结果: rootfs:(下载)这个文件在烧的时候修改下名称,我用的是 http://cdimage.ubuntu.com/cdimage/ubuntu-core/releases/14.04.1/release 中的ubuntu14.04.2 的,非常小,只有 不到60MB,所有定制完成也才66MB,当然,里面也什么都不包含(甚至不包含 openssh-server),不过启动了之后能启动网络就一切OK了。这个里面已经包含了内核和相 关的模块,至少可以启动docker。我主要是用来玩docker的。

u-boot.bin: 下载 这个是定制的编译的。我对启动的变量进行了修改,以便可以启动emmc中的系 统以及更好的显示到液晶屏幕上,默认分辨率:1280×800 对于uImage文件,你可以使用老的,反正我们启动的时候也不会使用到这个部分。 其他的操作可以按照e9官方的教程进行烧制,正常情况下,启动完应该就是3.10.17的 ubuntu 14.04.2系统了。

以下是枯燥的技术部分:

继续阅读e9卡片式电脑运行ubuntu 14.04.2

linux的tcp_forward的使用

我服务器在国外,上海电信从刚开始的流畅访问慢慢变成了现在的60%+的丢包!!!大概跟 踪了下路由的节点。明显是上海电信到骨干网在捣乱,而从北京电信(机房)访问的几乎就 不丢包了,上海电信到北京电信的访问是稳定且非常快速的。这让我的小脑瓜激动了不少。

ssh不是那什么可以做端口转发么,linux说不定也可以,于是在网上随便一找,果然支持 tcp_forward啊,执行下下面的内容:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 8388 -j DNAT --to-destination US_VPS_IP:8388
iptables -t nat -A POSTROUTING -p tcp -d US_VPS_IP --dport 8388 -j SNAT --to-source JAPAN_VPS_IP

添加执行,然后本地的ip指向北京电信的ip, 立马访问流畅了不少

tramp文件引起的Tramp异常

我使用的是seafile来进行不同计算机之前的文件同步,包括emacs的所有配置管理,基本上 都是工作正常的,但前两天新加了一台win7,然后使用plink访问远程的时候就会华丽的无任 何输出或者说“ls”找不到。

我甚至关闭了几乎所有的插件,都还是会出问题,但完全不使用任何配置却正常(我将 plink添加到了系统的path中,这并不是我的风格)。

后来我关闭了所有的插件,依然出问题。无赖之下我清空了配置目录中的所有内容,然后就 正常了。我试着从配置目录一个一个恢复,直到tramp文件出来就挂掉了。

tramp文件是tramp-cache使用的,缓存一些乱七八糟的东西。

只所以会这样是因为这个文件默认保存在 user-emacs-directory 目录下,我将这个目录设 定在一个自定义的目录,比如emacs_config,然后使用seafile同步文件,自然包括了这个 文件。

对我而言,有两个解决方案:

  1. seafile同步中排除这个文件
  2. 在.emacs中添加下面的配置

(setq locate-user-emacs-directory “~/.emacs.d”)
(setq tramp-persistency-file-name nil)

GFW DDOS wpkg.org

环境

国内,不翻墙状态,访问”http://connect.facebook.net/en_US/sdk.js

日志

curl -v "http://connect.facebook.net/en_US/sdk.js"

#+begin_example

Hostname was NOT found in DNS cache

Trying 144.76.67.84…

Trying 2a01:4f8:191:8053::2…

Immediate connect fail for 2a01:4f8:191:8053::2: Network is unreachable

Connected to connect.facebook.net (144.76.67.84) port 80 (#0)

> GET /en_US/sdk.js HTTP/1.1 > User-Agent: curl/7.35.0 > Host: connect.facebook.net > Accept: / > < HTTP/1.1 301 Moved Permanently

Server nginx/1.8.0 is not blacklisted

< Server: nginx/1.8.0 < Date: Sun, 26 Apr 2015 08:36:22 GMT < Content-Type: text/html < Content-Length: 184 < Location: http://wpkg.org/my.js < Expires: Thu, 31 Dec 2037 23:55:55 GMT < Cache-Control: max-age=315360000 < X-Varnish: 366440577 360457 < Age: 88975 < Via: 1.1 varnish-v4 < Connection: keep-alive < <html> <head><title>301 Moved Permanently</title></head> <body bgcolor=”white”> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.8.0</center> </body> </html>

Connection #0 to host connect.facebook.net left intact

#+end_example

闲暇之余的一点笔记