树莓派起步及简单应用
创建日期:2014-09-04 15:12

安装操作系统

安装RPi操作系统包括了大量细节,但这里有一些家用特定服务器的安装提示,大致按顺序讲述。

直接通过http://www.raspberrypi.org/downloads获取Raspbian Wheezy安装镜像,并写入到SD卡,用网站上已列出步骤;

第一次引导RPi时,连接一个键盘、鼠标和显示器。在引导RPi之前别忘打开显示器,可以检测到正确的HDMI或混合输出端口;

RPi有一个很好的raspi-config界面,在第一次启动时你会看到。对于家庭服务器来说,以下选择将会有用

1. Expend Filesystem:调整默认2GB OS镜像的大小,来填满闪存卡剩余的内存
2. Change User Password:修改默认密码`raspberry`,越安全的密码越好
3. 设置你的语言en-US.UTF8ZH-CN.UTF8 (空格键选择或取消)
4. Advanced Options:执行Update更新系统
其它:
memory_split:GPIU服务分配最少的内存(16M)尽可能为其他服务留下更多内存
SSH:别忘开启SSH服务
boot_behaviour:关闭“启动至桌面(boot to desktop) (节省内存)

完成后,你将在出现 pi@raspberrypi 提示符,安装脚本可以在任何时间通过 sudo raspi-config 命令重新运行。

其他配置

静态IP让一切变得更容易,切换eth0的网络设置

sudo nano -w /etc/network/interfaces

更改eth0的那行 iface eth0 inet dhcp (根据你的家庭网络设置修改)

======/etc/network/interfaces======
...
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
...
======/etc/network/interfaces======

创建本地用户并加入到users组和sudo组

sudo adduser YOURUSERIDHERE
sudo usermod -a -G users YOURUSERIDHERE
sudo usermod -a -G sudo YOURUSERIDHERE

更新系统确保所有的库是最新的

sudo apt-get update
sudo apt-get upgrade

重新启动,先关闭PI

sudo shutdown -h now

关闭状态(注意RPi电路板上的绿色LED状态指示灯,可以知道什么时候完成关闭了),拔下显示器,键盘,鼠标和电源线。插入USB端口上的硬盘,然后插回电源启动RPi。

RPi开启状态(这些绿色LED指示灯用来描述状态),你可以从远程网络上的任何其他机器ssh到RPi并完成所有的配置(更改以下命令里的IP为你的静态IP):

ssh YOURUSERIDHERE@192.168.1.10

添加外设

用dmesg来寻找你的存储设备,会发现几乎可以肯定是/dev/sda。使用自动挂载去挂载移动存储设备,这样更灵活,因为在启动时这些设备也许没有或者没准备好

sudo apt-get install autofs
sudo vi -w /etc/auto.master

======/etc/auto.master======
...
/misc /etc/auto.misc
...
======/etc/auto.master======

sudo vi -w /etc/auto.misc

创建一个符号链接的短路径

ln -s /misc/storage /storage

备份仓库

配置Samba

安装sambacommon-bin库:

sudo apt-get install samba samba-common-bin

使用smbpasswd让你的本地ID能访问:

sudo smbpasswd -a YOURUSERIDHERE

编辑samba配置文件

sudo nano -w /etc/samba/smb.conf

更改workgroup = WORKGROUP行以匹配你的Windows工作组名称

注释掉或删除[homes]和[printers]共享(打印机共享稍后将通过直接CUPS访问来完成)

为Windows备份路径增加一个条目。这是我的示例,放置在该文件的底部

======/etc/samba/smb.conf======
...
[win7pc]
comment=Backup for windows PC
path=/storage/win7pc
writeable=Yes
create mask=0777
directory mask=0777
browsable=Yes
public=Yes
valid users=YOURUSERIDHERE
...
======/etc/samba/smb.conf======

重启Samba使你的编辑生效

sudo /etc/init.d/samba restart

从Windows文件管理器通过映射一个网络设备测试连通。

对Linux设备来说,设置和使用deja-dup非常简单。它被默认安装在我的Fedora 18和Ubuntu 12.10上。包的名称是deja-dup,程序名简单的称为Backup。虽然RPi很容易支持NFS导出,但我发现使用deja-dup的SSH选项更容易、更方便,在RPi上它不需要额外支持。同时安全起见,也要指定一个deja-dup加密密码:

sudo mkdir /storage/linuxlaptop
sudo chown -R YOURUSERIDHERE:YOURUSERIDHERE /storage/linuxlaptop

从linux客户端启动备份程序,选择SSH作为备份位置,输入RPi的IP地址和你创建的存储位置。首次备份会很慢,但是以后的运行将只发送增量变化的数据,速度更快。

多媒体服务器:DLNA

现在每个人的文件都已安全备份。让我们继续看些有趣的!一个DLNA服务器可以让你集中存储你的电影、音乐和图片。通过这个中心库,家中每一个屏幕的DLNA客户端都可以轻松重放此内容。

至少,这是一个宣称。事实是这样的,DNLA规格并不太确定一些重要的事情,如支持哪些格式或编码。每个客户端通常对于支持什么格式和服务器功能都有略微不同的想法。很多高功率的服务器也许能转码本地内容到移动设备所支持的格式,但是在RPi上是不可能的,在即时转码上经常扰乱其他功能,如暂停、快进和倒带。一般情况下,高功率设备如PS3、Xbox和WD-TV设备支持大多数格式,而无需任何转码。低端设备如智能电视或蓝光播放器只支持更有限的编码列表。

对于RPi来说,最好的办法是支持你的主要的DLNA设备的标准编码,然后测试你的其他DLNA客户端。在我的情况下,我的PS3充当DLNA客户端,PS3能够流畅播放经Handbrake制作后的.m4v文件。

对于RPi的DLNA服务器来说,Minidlna是个很好的选择。它已经在Raspbian发行版中,易于设置和使用,并以最小的资源占用来运行

sudo apt-get install minidlna
sudo nano  -w /etc/minidlna.conf

/etc/minidlna.conf文件的相关部分仅供参考

...
# I found keeping video + audio in different paths helpful
media_dir=V,/storage/dlna/video
media_dir=A,/storage/dlna/music
...
presentation_url=http://192.168.1.10:8200/
...
friendly_name=MyRPi
...
# Since I add new media infrequently, turning off
# inotify keeps minidlna for polling for
# content changes. It's simple enough to run
# sudo /etc/init.d/minidlna force-reload
# when new content is added.
inotify=no

重启minidlna以加载新配置

sudo /etc/init.d/minidlna force-reload

Minidlna能够为你的设备支持的电影提供电影海报缩略图。这让我能够更方便地在几十个电影文件中滚屏查找我想要的那个电影。我发现每个电影一个目录是最兼容的文件布局,只包含影片文件和缩略图,图像命名为Cover.jpg。使用像MovieName.m4vMovieName.jpg的格式在PS3上工作的很好,但它不太适合VLC(除非你能让VLCuPNP插件首先查找服务器的话)。

通过PS3,你可以通过转到在XMB栏上的Video测试连通性。当视频列表向下翻页时,你以前设置的friendly_name应该是可见的,测试确保Minidlna是通过浏览器转到http://192.168.*.*:8200/

非DLNA设备的多媒体

当你让DNLA与你的一些设备一起工作时,你可能会发现有些设备并不适合它,所以多媒体计划B是个好主意。Nginx网站服务器有一个MP4插件尝试在旧式的HTTP连接上改善流媒体传输,但是浏览器回放的性能差别很大,在一部电影里快进也一直不工作。看起来多媒体共享或非DLNA设备的最低共同特性是使用传统Samba共享的访客只读访问。

这是/etc/samba/smb.conf的部分示例

[dlna]
path=/storage/dlna
read only=yes
browsable=yes
public=yes

重启Samba

sudo /etc/init.d/samba restart

你可以开始测试你的客户端。

我用一个混合的编码m4v视频文件测试了以下客户端

Android 4.0.4手机:`ES File Explorer`与`ES Media Player`;
Android 4.1.2平板电脑:`ES File Explorer`与`ES Media Player`;
Linux设备:自动挂载`//192.168.1.10/dlna`,然后使用VLC或MPlayer;
Windows:挂载`//192.168.1.10:/dln`a,然后使用VLC;

所有设备都能立即开始播放和快进,没有延迟。

打印服务器

RPi运行CUPS相当不错,所以它容易共享一个较旧的没有本地网络接口的打印机。

安装你的打印机所需的CUPS和任何软件包。我需要hplip-cups,因为我有一个HP喷墨打印机:

sudo apt-get install cups hplip-cups

更新Listen行和增加Allow @LOCAL指令(你可以使用其他机器在你的LAN上去管理CUPS)

======/etc/cups/cupsd.conf======
#Listen localhost:631  #Comment this out
Listen 192.168.1.10:631 #Add this line
...
  Order allow,deny
  Allow @LOCAL
# Restrict access to the admin pages...
  Order allow,deny
  Allow @LOCAL
# Restrict access to configuration files...
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @LOCAL
======/etc/cups/cupsd.conf======

添加你的本地ID到lpadmin组,管理CUPS

sudo usermod -a -G lpadmin  YOURUSERIDHERE

重启CUPS

sudo /etc/init.d/cups restart

然后转到http://192.168..:631/并点击Adding Printers and Classes去设置你的打印机。

我的打印机是自动发现的USB设备,所以,我只需点击share就可以。

同样访问https://192.168..:631/admin,确保检查Shareprinters connected to this system(共享连接至这个系统的打印机)

完成后,你可以开始设置你的客户端。

当我输入主机名,我的Linux客户端就能够自动发现打印机,并选择正确的驱动程序。

在我的Windows 7的机器上,一旦我选择Network Printer(网络打印机),我必须点击The printer that I want isn’t listed(我想要的打印机未列出),选择Select a shared printer by name(通过名称选择共享的打印机),然后从CUPS网络接口输入URL:http://192.168.*.*:631/printers/HP_J4500

Reference: http://zhidx.com/p/119.html

其它要点

更换更新源

未测试效果

sudo vi /etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/   wheezy main contrib non-free rpi

更多更新源在此

[http://www.raspbian.org/RaspbianMirrors](http://www.raspbian.org/RaspbianMirrors)

初始设置

sudo raspi-config

更新raspi-config,扩容SD卡,设置语言为:EN-US.UTF8 ZH-CN.UTF8,去掉EN-GB

安装拼音

sudo apt-get install scim-pinyin

安装RDP

sudo apt-get install xrdp

安装Screen

sudo apt-get install screen

常用命令 screen, screen-list, screen -r xxxx, 切出Screen用Ctrl+A,D

删除无用服务

之前update时这个包一直更新失败,体积又大,暂时用不着先remove掉

sudo apt-get remove wolfram-engine

安装Samba

sudo apt-get install samba samba-common-bin

加入NTFS,EXFAT支持

sudo apt-get install ntfs-3g
sudo apt-get install exfat-nofuse

外置优盘格式化成EXT4,去掉日志提高性能

sudo mkfs.ext4 -O ^has_journal /dev/sda1

挂载

sudo vi /etc/fstab
/dev/sda1 /mnt/usb ext4 defaults,noatime,nodiratime 0 0

在优盘里新建一个share文件夹,做局域网共享

mkdir /mnt/usb/share
chmod -R 777 /mnt/usb/share
sudo vi /etc/samba/smb.conf

添加:

[share]
comment = USB Share
path = /mnt/usb/share
read only = no
writeable = Yes
guest ok = yes
only guest = Yes
create mask = 0777
directory mask = 0777
browseable = Yes
public = yes

GoAgent

Reference: http://xwlogic.github.io/2014/02/rpi_gae/

安装基础包

sudo apt-get install python-crypto
sudo apt-get install python-openssl
sudo apt-get install libnss3-tools

Gevent提高效率

sudo apt-get install python-dev
sudo easy_install -U distribute
sudo apt-get install python-pip
sudo apt-get install libevent-dev
sudo pip install gevent

重建证书库

cd ~
mkdir .pki
cd .pki
mkdir nssdb
certutil -d sql:$HOME/.pki/nssdb -N
sudo certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n GoAgent -i /app/goagent/CA.crt
certutil -d sql:$HOME/.pki/nssdb -L

修改proxy.ini

ip = 0.0.0.0

修改proxy.pac

var autoproxy = 'PROXY 0.0.0.0:8087';
var blackhole = 'PROXY 0.0.0.0:8086';

开机自动启动

sudo vi /etc/rc.local
nohup /usr/bin/python /home/pi/gae/goagent-goagent-e206aac/local/proxy.py >/dev/null 2>&1 &

安装nginx和php

http://www.ducky-pond.com/posts/2013/Sep/setup-a-web-server-on-rpi/

安装&优化mysql

http://www.ducky-pond.com/posts/2014/Feb/how-to-install-and-optimize-mysql-on-raspberry-pi/