分类目录归档:RaspberryPi

一台出色的Linux机器

给派换了个ArchLinux

因为Debian系的Linux玩的有点多,于是想找另外一个发行版来玩一下。 先是装了个pidora,可是出了点问题,一启动就报错

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

在Google上搜索,但是结果只有两页,而且看了一些,也没有什么参考价值……好吧~我再换一个! 再继续在wiki上看有哪些系统可以玩……哎~ArchLinux,早听说过这个了,听说是超轻量级而且出色的Linux,好,就决定是你了! 先从Google找到ArchLinux的RaspberryPi版,下回来,大小不到200M,是目前找到的镜像里面最小的,解压出来,依旧有1.9G,这压缩率真恐怖。 然后就是将系统烧录到SD卡上。Windows的话就用Win32DiskImager,Linux或者MAC或者Unix系的话就dd,用法是

dd if=镜像 of=SD卡的设备名称

SD卡的设备名称一般为mmcblk,mmcblk0是第一张SD卡,mmcblk0p1是第一张SD卡的第一个分区,详情看自己的/dev。更多详情请自行Google。

写好之后最好还是找个Linux环境(用Windows又不想装Linux的给我弄个虚拟机去),以方便对SD的扩展操作。

因为没有显示器在手边,按照老方法,用TTL来登陆操作,下面是来自http://lavalink.com/2012/03/raspberry-pi-serial-interfacing/的示意图。 raspberry-pi-serial_sm 照着连接好之后,用终端工具连接,我这里用的是putty,简单快捷。

给RaspberryPi上电之后大概几秒钟(ArchLinux启动就是这么快!),系统就启动完成了。而且在TTL口没有调试信息的输出,当初还以为出了什么问题,结果点了几下回车,就出现了登陆提示……

最先要做的事情当然是修改locale,参考https://wiki.archlinux.org/index.php/Beginners’Guide(简体中文)

修改/etc/locale.gen,去掉想要的locale前面的注释,然后运行一次locale-gen。想要的locale就出来了。

下一步是改环境变量,

export LANG="zh_CN.UTF-8"

然后可以修改~/.config/locale.conf,加入自己想要的locale,以后登陆就不用每次都手动改变量了。

语言弄好了,接着就是扩展一下SD卡上的分区。因为镜像是根据2G的SD卡搞的,这意味着我手上的8G的SD卡有6G没有用到。

先找个Linux环境,因为磁盘操作的话不能在Pi自身上完成,就算是OpenWrt来做也可。

参考:http://conanblog.me/blog/raspberry-pi/hack/arch/linux/go/2013/02/17/play-with-raspberry-pi/

fdisk -uc /dev/mmcblk0

打开SD进行操作。

用p来列出分区表,用d来删除分区,用n来新建分区。

附上原文中的操作过程作为参考:

$ sudo fdisk -uc /dev/mmcblk0

# 打印分區表
Command (m for help): p

Disk /dev/mmcblk0: 3904 MB, 3904897024 bytes
64 heads, 32 sectors/track, 3724 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048      186367       92160    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          186368     3667967     1740800   83  Linux

# 刪除第二個分區
Command (m for help): d
Partition number (1-4): 2

# 新建一個分區
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2

# !!! 第一個扇區號必須和上面刪除的分區的起始扇區號一樣,這裏的話是186368 !!!
First sector (186368-7626751, default 186368): 186368
Last sector, +sectors or +size{K,M,G} (186368-7626751, default 7626751):
Using default value 7626751

# 保存剛剛的操作並退出
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

然后检查磁盘错误、扩容

$ sudo e2fsck -f /dev/mmcblk0p2
$ sudo resize2fs -p /dev/mmcblk0p2

然后就基本上能用了。

查看树莓派当前的CPU温度

夏天渐渐来临,我也渐渐开始担心树莓派本身的散热,毕竟那之前CPU摸起来都是烫手的。

于是给树莓派加上了一个散热片,瞬间就变得好高级的样子。

后来一摸那块散热片,都明显感到烫手,这可非常不妙的样子啊,于是就想想怎么查看树莓派的当前温度。

上网稍微查了一下,发现标准的Linux查询方法不适用,于是又查了一下树莓派的,于是就发现了。使用

sudo /opt/vc/bin/vcgencmd measure_temp

能够显示树莓派的当前温度。

就像这样子

temp=49.2'C

虽然看说明,CPU似乎在-40~85°C都能正常工作的样子,不过能降点温还是不错的~

编译了一个在RaspberryPi上用的seafile client

seafile官方网站:http://seafile.com

参考:官方wiki

在VPS上,使用着dropbox来备份数据,表示用着用着用的很舒服,后来入手了raspberrypi之后,当然也想在pi上弄一个,但是dropbox并没有提供源代码,只提供了基于x86的二进制文件,所以其他平台都不能使用,相当的怨念。

后来看到了一个很神奇的类似软件,叫做seafile,提供了跟dropbox差不多的服务,而且client和server的源码都能弄到,马上就兴奋起来了,弄一个出来给我的Pi玩吧~

然后参照着官方的wiki将全部的包都给编译出来了,根据wiki,有两个包是编译的时候需要的(不过看起来是运行的时候也需要的)。后来想了想,干脆做成安装包吧,于是稍微研究了一下,做了几个安装包顺便放出来。

ccnet_1.2.0-1_armhf.deb
libsearpc_1.0.1-1_armhf.deb
seafile_1.4.5-1_armhf.deb

下一步着手研究那个server怎么编译……

截图-seafile

截图-seafile

linux挂载samba储存

入手了RaspberryPi之后,发现容量果断的不足,这时候就是挂载文件系统的时候了。由于不同的系统之间的差异,软件包维护的不同,造成了挂载的命令稍微有点不一样。

RaspberryPi的话,samba并没有注册smbfs,而是使用了cifs(或许这个才是正常通用版?),所以,mount的用法稍微有点不一样

mount.cifs <remotetarget> <dir> -o <options>
Options:
 user=<arg>
 pass=<arg>
 dom=<arg>

挂载之后就能在mount表里面看到了

root@raspberrypi:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
rootfs               7.2G  6.4G  409M   95% /
/dev/root            7.2G  6.4G  409M   95% /
devtmpfs             188M     0  188M    0% /dev
tmpfs                 38M  696K   37M    2% /run
tmpfs                5.0M     0  5.0M    0% /run/lock
tmpfs                 75M   68K   75M    1% /run/shm
/dev/mmcblk0p1        56M   17M   40M   30% /boot
/dev/sda1            7.4G  4.9G  2.2G   70% /media/16b2d773-3813-4672-99b8-6fc9be6cbed9
//192.168.11.1/Work   30G   27G  1.3G   96% /mnt/Openwrt/Work

如果想自动挂载的话,就需要写到fstab里面,格式如下

//SERVER/SHARENAME /mnt/MOUNTPOINT cifs noauto,noatime,username=USER,password=PASSWORD,workgroup=WORKGROUP 0 0

就能实现开机自动加载了。

在Apache上使用客户端证书认证

前阵子在nginx上做了客户端证书认证,发现满足感大大的有,于是一发不可收拾,在RaspberryPi上的Apache也做了一个。

上参考:

http://www.adintr.com/article/blog/192

http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

 

首先,第一步是做证书。

这部分是老生常谈了,懒人表示继续在路由上用easyrsa做(参考1参考2),写了一份server的key和crt之后就可以拿来用了。(之前我有CA证书和客户端证书了)

然后到手3个文件, server.key server.crt ca.crt。

修改/etc/apache/sites-available/default-ssl

找到这些字段

SSLCertificateFile
SSLCertificateKeyFile
SSLVerifyClient
SSLCACertificateFile
SSLVerifyClient

去掉注释之后,分别填上 server.crt的位置,server.key的位置,”on”,ca.crt的位置,”require”,就像这样

SSLEngine on
SSLCertificateFile    /etc/apache2/certs/pi.crt
SSLCertificateKeyFile /etc/apache2/certs/pi.key
SSLCACertificateFile /etc/apache2/certs/ca.crt
SSLVerifyClient require

配置也完成了。

然后启用一下ssl的mod和这个默认的ssl配置,就是分别做一下软连接。

最后启动/重启apache服务器,好了,看到浏览器问你要证书了。

给RaspberryPi装上Samba服务器

果断地,在Pi入手之后必须的工作之一就是samba了,还记得再之前从来都不知道这东西的好,用上了之后就发现离不开了。

虽然说其实在linux环境下面的话sftp也就满足了,可是平时都是用的windows,所以还是用samba比较舒服,虽然性能实在不怎么样……

首先吐槽一下软件源那边的问题,尼玛,全世界都在说用这个“testparm”来测试samba的配置文件有没有问题,但是我照着各种教程安装上samba4-common-bin之后还是没有这东西,于是还是只能手动修改配置文件了。

因为路由上也有samba,于是果断的参考一下,发现一个很蛋疼的事实,raspbian的samba在安装完成之后,默认的配置文件里面有个

passdb backend = tdbsam

但是根据openwrt的samba配置文件来看,openwrt用的是smbpasswd,而这东西是负责密码的。

然后就我嘞个擦,这尼玛密码怎么弄?

直接参照smbpasswd来改密码的方法不可能,因为没有tdbsam这东西(为什么什么都没有!)

在网上查了很久之后发现原来密码后端换成了pdbedit,要添加用户的话就用

pdbedit -a -u <用户名>

来添加用户,添加过之后就看到了很多信息,看起来比smbpasswd高级好多。

添加完之后就基本上能用了。

剩下的就是处理一下共享文件夹,格式如下看起来像这样子

[Disks]
	path           = /media/
	comment        = Mounted USB Disks
	browsable      = yes
	read only      = no
	create mask    = 777
	directory mask = 777

然后就能看到并且读写了。

更多详细的设定就去samba的官网查吧。

終於讓RaspberryPi用上HDMI輸出了

今天剛從亞馬遜哪裡弄回來了HDMI線和無線網卡,於是打算將輸出換到了HDMI,畢竟RCA那輸出實在看不上眼啊……雖然那種距離下用RCA更加能看清楚文字(手上只有電視有HDMI口,另外一個顯示屏有另外的人用,而且是沒有HDMI接口)。

換上了之後,打開電視,發現完全沒有輸出,我嘞個去,這搞毛?上網搜索一番之後,找到了一份config.txt的設定的詳細說明,仔細看了一番之後,稍微改動了一下,去掉了一些註釋,添加了一些修改。

在去掉這句的註釋之後

hdmi_safe=1

就發現HDMI有輸出了,但是分辨率依然慘不忍睹,只有可憐的500多x400多,於是繼續查下去,找到一些需要設定的地方

hdmi_drive 決定HDMI的輸出模式

hdmi_drive=1 DVI輸出,沒有聲音
hdmi_drive=2 HDMI模式,如果有聲音輸出並且被啟用的話就會有聲音輸出

hdmi_group 選擇模式分組,具體原理不明,根據這裡和下面的列表選擇分辨率

hdmi_group=1   CEA
hdmi_group=2   DMT

hdmi_mode 根據分組,下面分別有下列兩個表的效果

These values are valid if hdmi_group=1 (CEA)
hdmi_mode=1    VGA
hdmi_mode=2    480p  60Hz
hdmi_mode=3    480p  60Hz  H
hdmi_mode=4    720p  60Hz
hdmi_mode=5    1080i 60Hz
hdmi_mode=6    480i  60Hz
hdmi_mode=7    480i  60Hz  H
hdmi_mode=8    240p  60Hz
hdmi_mode=9    240p  60Hz  H
hdmi_mode=10   480i  60Hz  4x
hdmi_mode=11   480i  60Hz  4x H
hdmi_mode=12   240p  60Hz  4x
hdmi_mode=13   240p  60Hz  4x H
hdmi_mode=14   480p  60Hz  2x
hdmi_mode=15   480p  60Hz  2x H
hdmi_mode=16   1080p 60Hz
hdmi_mode=17   576p  50Hz
hdmi_mode=18   576p  50Hz  H
hdmi_mode=19   720p  50Hz
hdmi_mode=20   1080i 50Hz
hdmi_mode=21   576i  50Hz
hdmi_mode=22   576i  50Hz  H
hdmi_mode=23   288p  50Hz
hdmi_mode=24   288p  50Hz  H
hdmi_mode=25   576i  50Hz  4x
hdmi_mode=26   576i  50Hz  4x H
hdmi_mode=27   288p  50Hz  4x
hdmi_mode=28   288p  50Hz  4x H
hdmi_mode=29   576p  50Hz  2x
hdmi_mode=30   576p  50Hz  2x H
hdmi_mode=31   1080p 50Hz
hdmi_mode=32   1080p 24Hz
hdmi_mode=33   1080p 25Hz
hdmi_mode=34   1080p 30Hz
hdmi_mode=35   480p  60Hz  4x
hdmi_mode=36   480p  60Hz  4xH
hdmi_mode=37   576p  50Hz  4x
hdmi_mode=38   576p  50Hz  4x H
hdmi_mode=39   1080i 50Hz  reduced blanking
hdmi_mode=40   1080i 100Hz
hdmi_mode=41   720p  100Hz
hdmi_mode=42   576p  100Hz
hdmi_mode=43   576p  100Hz H
hdmi_mode=44   576i  100Hz
hdmi_mode=45   576i  100Hz H
hdmi_mode=46   1080i 120Hz
hdmi_mode=47   720p  120Hz
hdmi_mode=48   480p  120Hz
hdmi_mode=49   480p  120Hz H
hdmi_mode=50   480i  120Hz
hdmi_mode=51   480i  120Hz H
hdmi_mode=52   576p  200Hz
hdmi_mode=53   576p  200Hz H
hdmi_mode=54   576i  200Hz
hdmi_mode=55   576i  200Hz H
hdmi_mode=56   480p  240Hz
hdmi_mode=57   480p  240Hz H
hdmi_mode=58   480i  240Hz
hdmi_mode=59   480i  240Hz H
H means 16:9 variant (of a normally 4:3 mode).
2x means pixel doubled (i.e. higher clock rate, with each pixel repeated twice)
4x means pixel quadrupled (i.e. higher clock rate, with each pixel repeated four times)
These values are valid if hdmi_group=2 (DMT)
hdmi_mode=1 640x350 85Hz
hdmi_mode=2 640x400 85Hz
hdmi_mode=3 720x400 85Hz
hdmi_mode=4 640x480 60Hz
hdmi_mode=5 640x480 72Hz
hdmi_mode=6 640x480 75Hz
hdmi_mode=7 640x480 85Hz
hdmi_mode=8 800x600 56Hz
hdmi_mode=9 800x600 60Hz
hdmi_mode=10 800x600 72Hz
hdmi_mode=11 800x600 75Hz
hdmi_mode=12 800x600 85Hz
hdmi_mode=13 800x600 120Hz
hdmi_mode=14 848x480 60Hz
hdmi_mode=15 1024x768 43Hz DO NOT USE
hdmi_mode=16 1024x768 60Hz
hdmi_mode=17 1024x768 70Hz
hdmi_mode=18 1024x768 75Hz
hdmi_mode=19 1024x768 85Hz
hdmi_mode=20 1024x768 120Hz
hdmi_mode=21 1152x864 75Hz
hdmi_mode=22 1280x768 reduced blanking
hdmi_mode=23 1280x768 60Hz
hdmi_mode=24 1280x768 75Hz
hdmi_mode=25 1280x768 85Hz
hdmi_mode=26 1280x768 120Hz reduced blanking
hdmi_mode=27 1280x800 reduced blanking
hdmi_mode=28 1280x800 60Hz
hdmi_mode=29 1280x800 75Hz
hdmi_mode=30 1280x800 85Hz
hdmi_mode=31 1280x800 120Hz reduced blanking
hdmi_mode=32 1280x960 60Hz
hdmi_mode=33 1280x960 85Hz
hdmi_mode=34 1280x960 120Hz reduced blanking
hdmi_mode=35 1280x1024 60Hz
hdmi_mode=36 1280x1024 75Hz
hdmi_mode=37 1280x1024 85Hz
hdmi_mode=38 1280x1024 120Hz reduced blanking
hdmi_mode=39 1360x768 60Hz
hdmi_mode=40 1360x768 120Hz reduced blanking
hdmi_mode=41 1400x1050 reduced blanking
hdmi_mode=42 1400x1050 60Hz
hdmi_mode=43 1400x1050 75Hz
hdmi_mode=44 1400x1050 85Hz
hdmi_mode=45 1400x1050 120Hz reduced blanking
hdmi_mode=46 1440x900 reduced blanking
hdmi_mode=47 1440x900 60Hz
hdmi_mode=48 1440x900 75Hz
hdmi_mode=49 1440x900 85Hz
hdmi_mode=50 1440x900 120Hz reduced blanking
hdmi_mode=51 1600x1200 60Hz
hdmi_mode=52 1600x1200 65Hz
hdmi_mode=53 1600x1200 70Hz
hdmi_mode=54 1600x1200 75Hz
hdmi_mode=55 1600x1200 85Hz
hdmi_mode=56 1600x1200 120Hz reduced blanking
hdmi_mode=57 1680x1050 reduced blanking
hdmi_mode=58 1680x1050 60Hz
hdmi_mode=59 1680x1050 75Hz
hdmi_mode=60 1680x1050 85Hz
hdmi_mode=61 1680x1050 120Hz reduced blanking
hdmi_mode=62 1792x1344 60Hz
hdmi_mode=63 1792x1344 75Hz
hdmi_mode=64 1792x1344 120Hz reduced blanking
hdmi_mode=65 1856x1392 60Hz
hdmi_mode=66 1856x1392 75Hz
hdmi_mode=67 1856x1392 120Hz reduced blanking
hdmi_mode=68 1920x1200 reduced blanking
hdmi_mode=69 1920x1200 60Hz
hdmi_mode=70 1920x1200 75Hz
hdmi_mode=71 1920x1200 85Hz
hdmi_mode=72 1920x1200 120Hz reduced blanking
hdmi_mode=73 1920x1440 60Hz
hdmi_mode=74 1920x1440 75Hz
hdmi_mode=75 1920x1440 120Hz reduced blanking
hdmi_mode=76 2560x1600 reduced blanking
hdmi_mode=77 2560x1600 60Hz
hdmi_mode=78 2560x1600 75Hz
hdmi_mode=79 2560x1600 85Hz
hdmi_mode=80 2560x1600 120Hz reduced blanking
hdmi_mode=81 1366x768 60Hz
hdmi_mode=82 1080p 60Hz
hdmi_mode=83 1600x900 reduced blanking
hdmi_mode=84 2048x1152 reduced blanking
hdmi_mode=85 720p 60Hz
hdmi_mode=86 1366x768 reduced blanking

基本上設定好之後就沒問題了,系統自帶那改屏幕分辨率的東西實在不行呢~

raspberryPi到手了~

从ICkey.cn入手的,感觉价格略坑爹,比element贵了几十,但是看到element那边算上邮费也不便宜,就算了。

仔细看了一下,卖家还是深圳华强北的,大家都懂得……

不过发货速度略屌,昨天下午下的单,今天早上8点就到了,真心神速。

ickey.cn的订单

ickey.cn的订单

顺风快递

顺丰快递

仔细一看,还是快英国产的板子,很不错~

半路发现很坑爹的事情,笔记本的读卡器用不了了(曾经用过的),最后只能找到N年前的一个MP4来完成写镜像的任务,花了好长时间。

不过后来终于弄好了。

上图~

RaspberryPi

我家的RaspberryPi

表示忘记买HDMI的线了,结果发现用AV线居然显示效果可以接受,于是将就了一下,完成了开始的设定,启动SSH,然后连上网,装中文字体,设定locale,安装VNC,好了,将就着用着先。

顺手给上一点教程:
http://www.eeboard.com/tutorials/不同操作环境下如何将raspbian安装到sd卡/

 

下面说一下启动服务:

ssh的话直接在raspi-config里面设置,照着选就可以了,实在不懂的话看上面的第二个连接。

vnc的话安装完毕之后使用vncserver 启动,比较常用的话是这个:

vncserver -geometry 1280x800 -nolisten tcp

将1280×800替换成你想要的屏幕分辨率,至于那个”-nolisten tcp”可以不监听6001端口,似乎是在浏览器上用的,我有vnc的客户端,就不需要了。如果想要更安全一点,使用ssh通道来反向连接的话,可以加上”-localhost”参数,这样VNC就会只监听在本地上。

更多的东西等我过两天再说。