NetBSD编译安装Go和Node.js

现在Go和Node.js都在pkgsrc-wip项目里面,wip意思是work in progress,可以理解为开发进程中的软件包,稳定后才会被采纳进入官方维护的pkgsrc,现在好歹有wip就知足吧。嗯,写这篇文章的目的是希望能有更多人来研究BSD系统,作为Unix的较为正统的分支,BSD在很多方面还是值得Linux学习的,当然这两个流派风格是迥异的。摸索摸索几个月,以后就在自己的EC2上部署NetBSD了!

废话少说,直接上命令内容了。我安装了curl用来下载,你也可以用你自己喜欢的工具下载pkgsrc安装好。

curl http://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc-2012Q3.tar.xz > /PATH/pkgsrc.tar.xz

记得到时候自行修改pkgsrc-2012Q3,不可能指望今年年底还用去年第三季度的东西对吧。。。后面PATH表示路径,记得改成你相应的下载路径。下载很快的,前面讲过了,用的是最快的镜像点了,下载完成后就解压到系统里面,执行命令:

tar xvzf /PATH/pkgsrc.tar.xz -C /usr

等一会吧,解压出来好几百兆的文件呢,解压完毕后再来解压一个wip的source,先去pkgsrc-wip快照列表下载一个最新的下来(注意看一下文件尺寸,2013-01-03的那个文件只有400+KB是错误的文件,一般都是10M左右,不然下载下来也解不开),然后执行命令解压到系统:

cd /usr/pkgsrc
 tar xvzf /path/to/pkgsrc-wip-DATEHERE-snapshot.tar.gz

解压完成之后就可以开始编译Go和Node.js了,当然其它在wip中的软件也是这样编译安装!

cd /usr/pkgsrc/wip/go
 make install

上面的命令最后都是su切换到root账户下执行,免得提示没有权限。

可惜的是,pkgsrc-wip并没有把软件源代码也塞进去,所以make install其实会执行一大段复杂的过程,包括获取源代码、解决依赖关系神马的,结果服务器是自动用主站服务器,所以速度是龟速(10KB/s)……耐心等待哦。

至于Node.js的话,cd /usr/pkgsrc/wip/node && make install,其它软件的话自己去找找在哪个文件夹下cd进去然后make install就okay了!

SSH服务器登录提示消息配置

SSH的提示消息分为两种,一种是登录前,一种是登录后。登录前的提示是每个人都可以看到的,所以最好不要涉及机器的任何相关信息,一般给出警告之类的消息。登录后的话可以给出系统的运行情况(负载、空闲内存、空闲硬盘空间、硬件温度等)。

首先设置/etc/ssh/sshd_config,找到这一行

Banner /etc/issue

去掉前面的#注释,然后编辑/etc/issue这个文件,我的内容是:

This is a private machine.

————WARNING————-
Authourized administrators only.
——————————–

Your IP has been recorded.

这样,任何ssh连接到这台机器的终端都会先看到这个警告提示,然后才是密钥验证过程。对于合法的登录用户,会显示/etc/motd这个文件的内容,但是这个文件一般是静态的,不太适合编辑,所以可以编辑用户主目录下的.bash_login文件,这个文件的语法和bash一致,所以可以方便的显示一些动态内容。我这里这个文件的内容是:

echo -e "nOf course it runs on $(uname -s)n"
 CPUTIME=$(ps -eo pcpu | awk 'NR>1' | awk '{tot=tot+$1} END {print tot}')
 CPUCORES=$(cat /proc/cpuinfo | grep -c processor)
 echo "
 System Summary (collected `date`)
 - CPU Usage (average)       = `echo $CPUTIME / $CPUCORES | bc`%
 - Memory free (real)        = `free -m | head -n 2 | tail -n 1 | awk {'print $4'}` Mb
 - Memory free (cache)       = `free -m | head -n 3 | tail -n 1 | awk {'print $3'}` Mb
 - Swap in use               = `free -m | tail -n 1 | awk {'print $3'}` Mb
 - System Uptime             =`uptime`
 - Disk Space Used           = `df / | awk '{ a = $5 } END { print a }'`"

下面看看我的执行效果吧,宿主机器Fedora连接NetBSD虚拟机!(刚刚上面写的df/|awk……a=$4写错了,应该是=$5(已修正),下图的Disk Space Used显示的就是写错成$4的结果,写$5才能读取已使用的百分比)。

ssh

参考来源:Ubuntu Forum | Question Defense (都是英文)

国内访问速度最快的NetBSD镜像

有时候还是不得不感谢日本发达的基础设施给天朝屁民的帮助,不仅像SourceForge得益于日本镜像节点在中国访问能达到2~3M的速度,连相对偏门的NetBSD也是靠日本的镜像点能够跑满带宽!

废话不多说了,这个Mirror的地址是:

http://ftp7.jp.netbsd.org/pub/NetBSD/

当然了,这个镜像支持FTP访问的,把前面的http改成ftp就好了!更为难得是这个镜像点有pkgsrc!所以PKG_PATH可以改用这个镜像了,不要用慢吞吞的官方服务器啦~

同时如果使用pkgin来管理包的话,/usr/pkg/etc/pkgin/repositories.conf这个文件也要记得做相应的修改哦。

我这里6M的宽带,从这个镜像安装文件的下载速度最快有700+KB/s,平均也是超过600KB/s的!相当不错,速度简直等同于国内镜像了。

虚拟机安装NetBSD设置SSH、bash美化笔记

我是在Fedora 17下安装的VirutalBox,用VBOX安装的NetBSD 6.0.1(最新稳定版)。至于为什么不装FreeBSD这个在BSD里的巨头呢?因为NetBSD更加简洁,默认安装后不会启动任何服务,更适合DIY学习BSD!(在Linux下还玩不转的请千万不要踏足BSD免得被吓死 XD)

简单记一下要点,因为安装过程都可以在NetBSD.org上看完整的手册,这里只说上面没提到的。

首先VirtualBox必须设置两个虚拟网卡出来,一个是NAT用于利用我们的宿主机器连通外网,另一个是Host-Only Adapter用来和宿主机器交互。而一开始很可能Host-Only Adapter设置不出来网卡,这是因为得先在VBOX的虚拟机管理界面,点Files->Preferences->Network里面添加一个,然后就能设置了。

这个搞定之后,再开启NetBSD的虚拟机安装,安装完毕后,记得要设置DHCP自动获取地址(静态也可以,但我喜欢DHCP,简单~)。记住如果是静态IP的话要把Host-Only Adapter那个网卡的地址分配到和宿主机器下看到的VBox的虚拟网卡同一个区段,不然ping不通!

SSH的话在安装完毕的时候就可以选择开启的,也可以手动修改/etc/rc.conf 添加一行sshd=YES就可以了。

然后编辑/etc/ssh/sshd_config这个文件,把#PermitRootLogin的注释#去掉并将值改为yes,还要修改的有PasswordAuthentication(也是为yes)。这样就能用root账户从宿主机器SSH登录到NetBSD了(root账户密码不能为空,空密码的root还是不能登录的)。当然我建议你还是新建一个账户专门用来连接SSH,毕竟这安全一些。

下面说一下bash,安装完bash后,root账户chsh可以换为bash,但是普通用户却不行,总是提示什么Non-standard shell,然后拒绝修改,后来偶然看到shells的定义在/etc/shells这个文件,所以我们先获取root权限修改这个文件,添加一行/usr/pkg/bin/bash保存,然后就能chsh顺利修改shell为bash了!

最后可以修改一下.profile改一下PS1这个变量让bash的登录符好看一些~~

polishbash

修改主目录下的 .profile 文件,加入

export PS1="[[e[01;33mu][e[01;30m@][e[01;32mh] [e[01;34mW][e[0m]]\$ "

就可以和上面截图一样的效果的。颜色设置本来是e[XXXXm的,但是这样会导致一些奇怪的问题,所以必须在每个颜色设置的区块前面加上[,结尾加上],更多关于bash颜色的设置可以自行Google一下。这里只是抛砖引玉啊!

Amazon云计算EC2实例体验

之前说过本博客建立在OpenShift这个云计算平台上,今天要说的是另外一种云计算——Amazon的AWS(Amazon Web Service)。它们两者分类不同,OpenShift(还有类似的dotCloud、Heroku等)属于PaaS(平台即服务),而AWS(和Windows Azure等)属于IaaS(基础设施即服务)。

PaaS上创建的是Web应用,大多要求很多,程序的结构,文件组织形式都有相应的规范,不同的PaaS平台还不完全一样。好处当然是不用操心操作系统上的事情,基本直接上代码就能跑。

而IaaS就基础多了,IaaS更像是传统的VPS,反正我是把它当虚拟主机来玩,当然IaaS的平滑过渡性很好(发觉硬件资源不够用了,掏点钱就能升级,不用操心数据迁移之类的事情)。虽然麻烦一点,但是IaaS可以同时做很多事情!(想想一台电脑能干什么吧!)

关于亚马逊这个云计算平台的账户注册,首先需要一个Amazon.com的账户(和中国亚马逊账户不相通),然后要一张国际信用卡(VISA/MasterCard标识),说到国际信用卡的问题,还记得我之前介绍的Entropay么?我就是用的那个!AWS的账户注册的时候认真填写就没问题了,中途会打个电话过来输入屏幕上的验证码完成身份验证(一看来电显赫的美帝001来电啊)。

亚马逊的数据中心还比较多,分布全球的。美帝有几个,然后南美一个(巴西),欧洲一个(爱尔兰),亚太三个(日本东京、新加坡、澳大利亚悉尼,据说中国也会有了)。目前我这里的ping值显示到新加坡最快,只有70+ms(也有说到东京最快的,这里可以比较),在创建自己的实例(Instance)的时候要选最快的(这不是废话好么)!

一开始坑爹的亚马逊控制台会给我们带到一个奇怪的页面(反正我觉得没用哈),鼠标戳上面的导航进入EC2,后来就能Launch Instance了,系统镜像选Ubuntu 12.04.1 LTS吧(虽然我有红帽情结,但是被现实逼迫,RHEL的软件包不够新啊,没办法……)。等待Instance创建并安装启动好系统,就能用SSH进入控制它了!ssh命令行示范:

ssh -i YOURSECUREKEY.pem -l ubuntu XXXXXX.compute.amazonaws.com

首先是sudo apt-get udpate && sudo apt-get upgrade这是必须的,升级完成后在控制台(网页上)动作(Actions)选reboot让它重启一下再接下来做别的事情。

我还是想说这就和一台VPS差不多了么。。。然后想干嘛干嘛去吧,比如配置一个PPTP/L2TP/OpenVPN服务器,装个Shadowsocks之类的服务端(这些都是神马?嘘……别声张,自己查了知道就好了)。还可以搭建一个标准的LAMP来做个人网站神马的,即便是micro超微实例对于个人用户来说都是绰绰有余啊!

现在AWS的优惠政策是新注册使用的用户免费使用一年超微实例。

价格嘛,对于我没有把网站什么的扔在上面(貌似这样你们就知道我是用它干什么的了……),我以后是打算选择买Spot Instances(有翻译叫现货,一般叫竞价实例),就是价格浮动的和其它用户bid(可以理解成Amazon把空闲容量拿来拍卖),这种实例比普通的实例便宜太多了,亚太这边的比美国东部的要贵一点点,但是目前新加坡节点的价格是$0.004/小时,是的,我没有多打一个0……就是0.4美分一个小时,而且你可以中途关闭它就不用出钱了。我看了一下价格历史,最近3个月,只有10月15、16号那几天价格上涨到了$0.008/小时。。。这样算来,就算一天24小时实例全开,一个月才16、17人民币!!!

当然啦,我这种抠门至死的穷学生是不会放过另外一个IaaS——Windows Azure的!现在微软这个大恶魔的Windows Azure都支持安装Linux的实例哦!目前Windows Azure的免费政策是免费试用90天~所以明年Amazon EC2免费时间到期后果断再“试试”Windows Azure!

把CWM Recovery刷入W22PRO的内置存储器中

之前TWRP的Recovery触摸操作看起来很是过瘾,但是鄙人表示一直用CWM用惯了啊有木有!所以自己fork了CT的代码然后merge了CyanogenMod的jellybean分支,自己创了一个jellybean-aml分支出来(在github我的项目上有,需要的自己去checkout)。

做uImage_recovery这个文件不难,我的HatMod项目里面有解包和打包脚本,先把官方固件的uImage文件解包出来,然后用自己编译得到的CWM recovery的root里面的内容替换(boot下面的两个ko模块可以删掉),init文件我还是用的官方的init,然后repack脚本用我后来上传的那个gzip开头的脚本,这样可以在生成镜像之前先做一次gzip压缩,不压缩的话是会提示体积过大而打包失败的。

上面讲了一堆略有点技术流的东西,下面说说怎么把这个uImage_recovery刷到我们的W22PRO机器内置存储器中!这样就不需要外置的microSD卡也能进入CWM Recovery了,可喜的地方还在于CWM Recovery支持从机器内置存储器(就是大小13GB的那个)读取zip刷机包来刷机,还支持adb sideload功能,总而言之就是把CWM Recovery刷到机器NAND后——腰不酸腿不疼了!

技术达人们自己写刷机脚本打包刷进去就好了。我也特意制作了一个直刷到NAND的zip包,所以下面讲最简单的办法:

  1. 下载zip包(我放在SourceForge上了,文件名为cwm-based-6.0.2.3-flashable.zip)
  2. 将zip包放在外置SD卡上,进入CWM Recovery或者TWRP Recovery(或者官方Recovery都可以!)
  3. 选择Install zip from SDcard,然后找到cwm-based-6.0.2.3-flashable.zip确定刷进去
  4. 看到屏幕显示“Complete”就表示完成了!(如果有任何Error字样出现表示失败了。。。)

怎样确认成功刷进去了呢?重启进入CM10,长按电源键弹出关机菜单,选择重启,然后选择Recovery(可能被翻译成“恢复模式”了),确认后等待机器重启。如果没有刷进去就会重启进入官方原生的Recovery,而如果成功刷入的话就会进入CWM Recovery了!当然还有很多验证办法我就不一一列举了。

对了,我的GitHub项目页面(都是源代码或者脚本):

小白们可能喜欢的是SourceForge的RamosROMs项目(都是刷机包、Recovery之类的成品)

用scp、rsync快速上传文件到SourceForge

其实在我跑到GitHub上开项目之前我都是泡在SourceForge的,后来墙好像盯上了SF.net(现在已经没有封锁SF了!),而且SF当时不支持git管理,只支持svn(虽然我蛮喜欢svn的),我就屁颠屁颠跑到GitHub上感受git的伟大精神去了。

可惜GitHub的速度HTTP下载不够快,有时候需要托管一些大文件,比如Android的固件ROM什么的(鄙人还制作了一个Macis Linux,基于Puppy的发行版,ISO也是贼大的)。之前都是上网用SF的HTML5上传器上传,今天突然觉得这样效率不够给力啊,还要进网页翻目录,然后点Add Files的,有点烦。看到一行小字提示我可以用SCP、Rsync等方式上传(官方网页),下面说说我用的scp方式上传吧。

scp ICS_W30_HatMod2.0beta1_signed.zip librehat@frs.sourceforge.net:/home/frs/project/ramosroms/W30

第一个参数是上传的文件,librehat是我在SF的用户ID,后面ramosroms是项目名称,W30是项目下面的目录(以此类推)。其它的地方就不用改了。当然是终端里面输入。首次使用scp会提示要添加SSH密钥,yes回车,然后输入SourceForge的密码确认身份和权限就会开始上传了。

scp

上传速度还不错,蛮快的。如果是Rsync方式上传的话:

rsync -e ssh ICS_W30_HatMod2.0beta1_signed.zip librehat@frs.sourceforge.net:/home/frs/project/ramosroms/W30

就把前面的scp指令改成rsync -e ssh而已。我就没有测试Rsync了,scp已经够简单易用了!

再次说一下我这个Ramosroms项目吧,是我在SourceForge上创建的非官方固件项目,如果你也是蓝魔平板的固件开发者,欢迎联系我,我可以把你加入到这个项目中,这样大家都能简便地集中固件在同一个地方供机油们下载!(你不需要掌握Linux,你可以在Winodws下用任何一个浏览器打开SourceForge用网页上传的方式,速度也很快,只不过不能上传超过1G的文件……囧……哪会要用到1G的东西啊?)

小型KDE桌面Linux系统Slax 7.0塞入U盘体验记

我知道这个题目挺拗口的……Orz…

Slax GNU/Linux的网站: http://www.Slax.org

这是一个小型的KDE桌面环境的Linux发行版,基于Slackware制作而成!210MB的体积(中文版的体积为220MB)!驱动什么的都很齐全!KDE 4.9.4!

说说我怎么把它塞入U盘的吧,我这里是有一个专门装好GRUB2引导程序的U盘了,作为我的多功能启动U盘,关于怎么给U盘装GRUB2的话网上应该有,没有的话也很简单,就是在Linux下面grub-install而已……只不过最好用EXT2/3/4分区格式。

然后修改grub2的配置文件,加上下面这几行。

menuentry '啟動Slax 7.0作業系統'{
 load_video
 set gfxpayload=keep
 insmod gzio
 set root='(hd0,msdos1)'
 echo '裝載映像中...'
 linux /slax/boot/vmlinuz load_ramdisk=1 prompt_ramdisk=- rw printk.time=0 slax.flags=perch,xmode quiet
 echo '創建虛擬磁碟中...'
 initrd /slax/boot/initrfs.img
 }

唯一要注意的就是linux那一行的slax.flags参数,perch表示不保留更改保留更改(去掉perch将以LiveCD的形式运行),xmode表示进入图形化界面(KDE),还可以加入toram参数表示复制到内存中运行(这样就能在启动后把U盘拔出来,而且系统的运行速度会快一点,嘛,USB 3.0的可以忽视快一点的说法)。

当然不要忘记复制系统文件了!在官网下载简体中文版的zip包,将slax文件夹解压出来复制到U盘根目录就可以了。如果你跟我一样有强迫症,不要多余的文件的话,那么可以到slax下的boot文件夹中,将除了vmlinuz和initrfs.img以外的文件都删掉。

下面是简短的评述和截图

启动后的界面,典型的KDE风格
桌面的软件仓库打开,提示软件仓库还没有准备好呢……
Firefox预装了FXChrome主题,一开始看去被吓到了。。。

这个系统虽然个头比Slitaz和Puppy之类的要大得多,但是驱动非常齐全。我的电脑上硬件全部识别工作正常(Puppy对我的显卡和无线支持不好,Slitaz就更不用说了,驱动方面渣渣的)。而且作为KDE粉,难道不应该让自己用的所有Linux都是KDE么?(奸笑中……)

扩展方面的话,我看了一下zip下的几个sb文件,都是squashfs文件,应该按照它们的结构自己做扩展放进去就能被自动加载的,不用担心。待我研究好了告诉各位,目前是想把Avast!这个杀软和GParted分区软件做成sb文件塞进去,这样就能让我的Slitaz下岗了。。。

编译CM10 for W22PRO的相关过程记录

先说一下git的操作好了,这个git其实我也是今年刚开始用,之前都是用svn的(subversion其实也不太会……说来这些版本控制工具我都记不住指令啊……)。

因为蓝魔W22PRO用的是Amlogic MX(meson6)方案,而Christiantroy已经专心耕耘艾诺精灵2很久了,他在github上的很多项目,只要有jellybean-aml分支的基本就是需要fetch拿来用的。不过有一点问题的就是,最近这位大哥在搞CM10.1去了,repo都没有更新上游(CyanogenMod)的改动,所以其它的部分如果用CyanogenMod的上游代码就会造成一些问题。还好有强大的git帮我们合并这些更改。

首先进入一些需要为Amlogic修改的目录(因为我已经做了这项工作了,减轻了各位的压力,大家直接fetch我的那些github项目就好了),git checkout jellybean-aml 确保在jellybean-aml这个分支里面,然后git remote -v看一下有没有上游CyanogenMod的repo,没有的话得先git remote add NAME git://XXXXXX 添加一个NAME远程仓库(这些全部大写的字母都是可以自行变动的),然后git fetch NAME把源码下载到本地,只需简单的一个git pull NAME jellybean就能把NAME仓库的jellybean分支合并到当前分支(jellybean-aml)了!如果有冲突的话会提示的,一般不会有冲突会自动merge并做一个ref节点,如果你没有自己开项目就这样好了。如果有的话(比如我),就需要git push MINE提交这次变动到自己的远程仓库(MINE)。再说一下啦,我已经做过这项工作了,短期内大家直接取我的项目源码就可以了。

上面讲了那么多git的废话……下面讲一下编译。

如果你还没有W22PRO的源码,请上我的非官方项目clone下来到合适的位置(如果你这不知道就不要看这篇文章了,谢谢……)

cd /PATH_TO_CM/
 . build/envsetup.sh
 lunch
 make -j4

老掉牙的几个步骤……lunch菜单选择cm_w22pro-userdebug那个就好了(输入数字回车),make -j4表示用四个线程并行编译。

在我的笔电上每次从头完整的编译要2~3个小时。我的硬件配置?AMD 四核 2.0GHz,4G RAM(显然有点小,为了避免内存消耗完毕而出错终止,强烈建议创建一个swap分区或者swap文件,大小至少1G,建议4G以上)。

还没有开始编译的记住了,放CM/Android源代码的那个分区建议40G以上,而且必须是EXT2/3/4或者BtrFS、XFS之类的Linux分区!

批量删除软链接

find -type l -delete [PATH]

上面这条命令就可以将[PATH]路径下的所有软链接都删除掉。

用的是find这个Linux下非常实用的命令,type参数限定了文件类型为l(links),加上-delete删除参数就可以实现找出所有软链接并删除。

如果是要删除失效的软链接,需要加上一个-L参数,表示追踪软链接:

find -L [PATH] -type l -delete

我只所以需要删除全部的软链接是因为现在制作W22PRO的ROM遇到一个小麻烦,因为没有Bootloader和内核源代码,所以不能make otapackage生成zip刷机包,只好直接拿编译出来的system目录操作,但是这个目录下包含了太多软链接了,直接拿来压缩会得到一个巨大的zip包,所以必须先删除软链接(这些软链接将会通过刷机脚本updater-script重新生成),终于Google到了上面这条命令,非常实用,特此记录下来。