Archive for March 2014

Raspberry Pi技术笔记之一:OS选择及安装

树莓派到手已经一年有余了,难得的是这货从入手到现在一直处于服役状态,完全算得上近期购买的最实用数码玩意之一,最近抽时间写写这一年来的折腾经验。

因鄙人使用的桌面电脑是Mac,所以下面均以Mac OSX下的操作为例。因鄙人对linux的观点是只能用来跑server,所以我的树莓派一直都没有外接显示设备,即使安装系统初始化的时候。

OS选择

虽然树莓派只支持ARM Linux,但仍有多个的Linux发行版可以选择:基于debian的Raspbian应该是最大众的选择;OpenELEC则是集成XBMC的版本;鄙人选择的是崇尚简洁自由的ArchLinux,运行速度快,而且官方的包都很新,此系统的是缺点是需要有linux操作基础,包管理方式和其它发行版也大不一样。

OS安装

准备好一张容量大于2GB的TF卡,并且从树莓派的官网下载最新的ArchLinux OS镜像档,接下来:

  1. 打开terminal,查找定位TF卡设备名,mac的硬盘设备名从/dev/disk0开始,如果你没有自己加装过硬盘的话TF卡的设备名应该是/dev/disk1,因为我的电脑加装过一块硬盘,所以我的TF卡设备名为/dev/disk2,当然也可以通过容量信息等辅助确认
    pagebrin:~ berton$ sudo diskutil list
    /dev/disk0
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *128.0 GB disk0
    1: EFI EFI 209.7 MB disk0s1
    2: Apple_HFS Macintosh HD 127.2 GB disk0s2
    3: Apple_Boot Recovery HD 650.0 MB disk0s3
    /dev/disk1
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *500.1 GB disk1
    1: EFI EFI 209.7 MB disk1s1
    2: Apple_HFS DATA 499.2 GB disk1s2
    /dev/disk2
    #: TYPE NAME SIZE IDENTIFIER
    0: FDisk_partition_scheme *2.0 GB disk2
    1: Windows_FAT_32 NO NAME 94.4 MB disk2s1
    2: Linux 1.8 GB disk2s5
  2. unmount TF卡已挂载的分区
    pagebrin:~ berton$ sudo diskutil unmountDisk /dev/disk2
    Unmount of all volumes on disk2 was successful
  3. cd至下载目录,解压镜像文件,然后用dd命令将镜像文件写入TF卡,根据TF卡的写入速度及经验来看这个过程会持续比较久,而且dd命令是没有进度显示的,唯有耐心等待
    pagebrin:~ berton$ unzip *-wheezy-raspbian.zip
    pagebrin:~ berton$ sudo dd if=*-wheezy-raspbian.img of=/dev/disk2
  4. 待镜像写入完成后安全eject TF卡
    pagebrin:~ berton$ sudo diskutil eject /dev/disk2
OS启动及初始化(no monitor, no keyboard)

将TF卡插入树莓派,网线连接至家用路由器,并确保路由器开启了DHCP自动分配IP地址的功能。通电,在没有外接显示和键盘等设备的情况下操作系统会使用缺省配置并自动获取到IP地址,因为部分设置需要等待超时后才会继续,所以这个过程可能会比较久。

同时在路由器上刷新并查看分配给树莓派的IP地址,待看到IP后使用桌面电脑ssh远程登录即可,缺省帐号和密码是root/root。

IP地址配置部分,鄙人的建议是不要配置固定IP地址,一般情况下某个设备从路由器上获取的IP地址本来就是固定的,或者可以在路由器上做mac地址绑定。苦在树莓派上配置固定IP,当配置出错或者网络有变化,而且没有外接显示器和键盘的情况下就完全进不去系统了。

OS备份

系统备份的重要性不言而喻,尤其是整个系统都依赖于脆弱的TF存储卡,这样最好的容灾方案就需要对整个系统做定期备份,即对TF卡做镜像备份。备份方法是将树莓派停机,取出TF卡,插入电脑插槽,备份命令仍然为dd:

dd if=/dev/disk2 of=raspberry-backup-$(date +%F).img

天猫魔盒安装YouTube for TV版本

update on 201709

之前的资料太老,推荐的youtube版本也已经停用了。重新推荐一个新项目,用于国产没有内置Google框架的盒子。即不需要依赖Google框架,装上后即可以登录账号,观看订阅消息,而且界面与最新的Android TV保持一致。

https://smartyoutubetv.github.io/en/

update ended。

====================================================

本文介绍如何在天猫魔盒上安装YouTube for TV版本,理论上像小米盒子等国内一众盒子都可以直接安装。

YouTube for TV是专门为电视优化的一个版本,可以方便的用遥控器来操作所有功能,而且能无缝的和手机,平板,电脑进行多屏互动。因为天猫魔盒没有内置Google Play Store,阿里官方的应用市场上也没有提供此应用,所以只有找apk档案来手动安装了。

YouTube for TV一共有三个apk档案,下载地址如下:
http://pan.baidu.com/s/1pJJLTOZ

推荐使用adb install xxx.apk的形式来远程安装,这应该是最便捷的安装方式了:

adb install com.google.android.youtube.googletv*.apk
adb install com.google.android.gms-1.apk
adb install com.google.android.gsf.login-1.apk

很明显,第一个apk档为youtube for tv的安装档,但若只安装此档案你会发现虽然youtube可以使用但是无法登录google帐号,这是因为天猫魔盒没有集成google的服务框架和帐号系统,继续安装后面两个apk档,然后就可以使用google帐号登录youtube了。

最后来表扬一下Youtube多屏互动的便利性,使用配对码将多个设备配对后,将视频从手机,平板或是桌面PC推送到电视的体验只能用完美来形容。

wordpress迁移到ghost时,slug长度错误的处理

在把blog从wordpress迁移到ghost,从后台界面导入数据的时候出现如下报错:

A problem was encountered while importing new content to your blog. Error: Property ‘slug’ exceeds maximum length of 150 (element:posts / id:15)

搜索之后发现碰到这类错误的还不少,但都没有好的解决方案。仔细研究之后发现这个错误是由wordpress和ghost对slug这个字段的长度限制不一导致,wordpress对slug的长度限制是250个字符,而ghost的限制是150字符,即如果原来的wordpress文章标题过长就会碰到这个问题。

解决方法有二,一是修改wordpress导出数据,将所有文章的slug手动修改到150字符以内,如果原始文章数据较多这将会有不小的工作量,而且还会改变文章的url;另一则是修改ghost对slug字段的限制,这是比较彻底的方法,下面是操作方法。

对ghost下面slug字段长度的修改分为如下两步:

1. 修改sqlite3数据库中表posts中的字段类型,请将$GHOSTDIR替换为ghost目录路径

cd $GHOSTDIR/content/data/
cp ghost-dev.db ghost-dev.db_$(date +%Y%m%d)
sqlite3 ghost-dev.db ".dump posts" | sed -e 's/"slug" varchar(150)/"slug" varchar(250)/' > posts.dump
sqlite3 ghost-dev.db ".read ./posts.dump"
rm posts.dump

2. 修改ghost源码里面对slug字段长度的检测:

cd $GHOSTDIR/core/server/data/
cp schema.js schema.js_$(date +%Y%m%d)
sed -i "s/slug: {type: 'string', maxlength: 150/slug: {type: 'string', maxlength: 250/g" schema.js

修改完毕,重启npm,重新导入数据即可。

cd $GHOSTDIR/
killall node npm
npm start