树莓派论坛

 找回密码
 立即注册

用Raspberry Pi制作无线路由过程的札记1-连接ADSL和更新系统

树老大 发表于 2013-5-21 18:52:57 | 显示全部楼层 |阅读模式
就在两周前,用自己所剩无几的积蓄入了一块Raspberry Pi。Raspberry Pi,用官方的话来说就是一个基于Linux的只有信用卡大小的单板计算机,使用ARMv6架构的处理器。Raspberry Pi吸引人的地方并不是性能强悍的硬件配置,况且它的配置连一台中低端的智能手机都不如,乃至于连Google也不给它提供官方的Android支持,而只能依靠社区的力量。Raspberry Pi最大的卖点在于它拥有相对完整而且活跃的开发生态体系,很多知名的操作系统和发行版(如Debian、Arch Linux、RISC OS、FreeBSD……)都陆续发布支持Raspberry Pi的版本。而且这些操作系统和发行版的软件包也在不断更新。再加上全球各地都非常活跃的geek社区,造就了Raspberry Pi的生存价值。正因为这些,Raspberry Pi成为了一个可能快速搭建智能设备的廉价软硬件平台,这也是Raspberry Pi玩家真正喜欢它的地方。而它的中文名字被翻译为“树莓派”,但忠实的Raspberry Pi玩家还是喜欢简称它为“RPi”,所以之后的博客也便用这个简短的名称。
其实早在半年前就已经打算入一块来玩玩,只是当时家里的事让我不敢花费太多金钱在自己的兴趣上。在收到了RPi之后,我更加发现自己是一个不折不扣的机器控,可以不眠不休、废寝忘食地玩着它、想着它。从B版开始,RPi就分made in China和made in the UK。之前的全部是made in China。但中国制造的质量给全世界geek的印象真的不敢恭维。而RPi基金会在它们本土筹划了很久,终于可以自己生产了。虽然国产的RPi也有做工相当不错的批次,但能够买到就需要点运气了。思前想后了几天,我还是决定用高点的价钱去买英国制造的,而且这点花费也值得。起码可以免除因为国货参差不齐的质量问题造成不好的体验。
做了接近5天的research,最终决定下来一张入货清单。所有配件都是根据RPi的官方论坛和国内几个比较活跃的RPi论坛提供的信息来采购的,因为要保证所有进来的配件都能够与RPI兼容。特别是存储卡和USB无线网卡,因为这两样东西随便一样不能使用,都无法完成整个制作过程。也许很多人会认为这些东西都会有兼容性问题吗?通过对几个论坛里的玩家所反馈的信息表明,这个情况的确存在。而且还罗列了几个长长的硬件兼容列表,都是RPi玩家亲自试验的结果。从这里可以看到RPi社区非常活跃!
最终入到的配件列表是:
配件型号购买理由
TF存储卡金士顿 Class10 8GB (点此购买读写速度较快,节省刷系统映像的时间。
TF2SD转换器-由于选择了TF卡,所以也就需要这个。其实是因为有了这个才选择TF的。因为SD插入RPi后会露出长长的尾巴,而RPi的卡槽设计得比较细和薄,使用这个转换器可以避免RPi跌落时造成卡槽损坏。
无线网卡TP-LINK TL-WN725N (新手不推荐)耗电少,无需外加有源USB HUB即可使用,而且即插即用。(但由于入货时决定得比较仓促,没发现有v1和v2之分:v1是8188cus芯片,可以即插即用;v2是8188eu芯片,连Realtek官方也未提供可用的Linux驱动,但后来找到了解决办法。)
有源HDMI2VGA转换器-RPi只提供HDMI和复合RCA视频输出,而我只有VGA接口的显示器。从论坛里发现最好使用有源的,因为转换器本身需要消耗电力,如果由RPi提供这部分电力会造成RPi自身功率过高,进而导致电流过大,热功率提高,长时间运行会造成不可恢复的损害。
有源USB HUB力特 ZK-033A (点此购买USB HUB也选择有源的,因为USB设备本身就是需要电力的,而这也会使RPi的功耗提高,所以需要选择有源。还有一个是USB HUB最好是有反向供电隔离的,不过这个对B版的RPi影响不大了,因为官方已经修改过原本会引起故障的电源保险电路。
所以硬件配置准备好后就可以开始玩。用映像烧录软件将操作系统烧录到存储卡中。通过比较,最后选择Arch Linux ARM,顾名思义就是ARM版的Arch Linux。虽然之前没有用过Arch Linux,而是常用Ubuntu,选择raspbian(专为RPi定制的ARM版Debian,Ubuntu也是在它的基础上开发的)会熟悉点,但Arch Linux的开发理念却让我很喜欢,专为开发者设计,而非用户角度思考。可能有人会觉得Arch Linux没有sudo,由systemd管理启动依赖有点违反人道,但这不影响我对它的喜爱。集中式脚本的管理机制,精简的打包方式,类似BSD系统的Ports安装包管理工具都是我的style。(也许是因为有洁癖的关系吧^_^)
然而在初次启动的时候发现,Arch Linux ARM的系统映像里只有系统运行必需的软件包,连进行ADSL连接和配置的工具都没有。这就需要先到更新源去下载了。在Arch Linux ARM的官网上可以找到不同地区的更新源镜像地址,选择其中的一个进入,在“armv6h/core”目录下找到两个软件包:ppp-2.4.5-5-armv6h.pkg.tar.xz和rp-pppoe-3.11-1-armv6h.pkg.tar.xz。把它们直接放在已经烧录好的存储卡的根目录里。
由于使用了HDMI2VGA的转换器,使RPi无法正确识别显示器的类型,如果直接启动可能会黑屏。所以要强制RPi从HDMI输出视频信号,还要指定所使用显示器的最佳分辨率,做法是将下面的内容保存为名称为config.txt的文本文件,并覆盖掉存储卡根目录中的config.txt文件:
  1. hdmi_force_hotplug=1config_hdmi_boost=4hdmi_group=2hdmi_mode=35hdmi_ignore_edid=0xa5000080disable_overscan=1
复制代码
config.txt可配置参数的详细说明请见RPiconfig
现在就可以把存储卡插入RPi并接通电源了。操作系统启动后,可以在“/boot”目录里找到刚才下载的两个软件包,通过pacman就可以安装了。但要先安装ppp,再安装rp-pppoe:
  1. [root@alarmpi ~]# pacman -U /boot/ppp-2.4.5-5-armv6h.pkg.tar.xz
  2. [root@alarmpi ~]# pacman -U /boot/rp-pppoe-3.11-1-armv6h.pkg.tar.xz
复制代码
由于ADSL配置程序(其实就是一个脚本)需要通过/usr/bin/echo来显示提示信息,但现在系统里还没有这个程序,可以通过使用/bin/echo代替,方法是建立指向/bin/echo的软链接/usr/bin/echo:
  1. [root@alarmpi ~]# ln /usr/bin/echo /bin/echo
复制代码
现在就可以将ADSL网线接上,通过
  1. [root@alarmpi ~]# pppoe-setup
复制代码
进行ADSL连接配置。接下来就是根据提示信息输入相关的信息:
  • Enter you PPPoE user name – 输入ADSL连接的用户名
  • Enter the Ethernet interface connected to the DSL Moderm – 输入用于ADSL连接的网卡名称,保留默认的eth0就好,除非你用其他网卡,就输入其他网卡的名称
  • Enter the demand value – 选择是按需拨号,还是持续连接。如果IP地址需要动态获取的话,建议保留默认的no即可
  • Enter the DNS information here – 输入DNS服务器,如果你不知道或DNS是由服务器分配的可以直接填“server”
  • Please enter your PPPoE password – 输入ADSL密码
  • Please re-enter your PPPoE password – 再输入一次ADSL密码
  • Choose a type of fire wall – 选择防火墙类型,选择0不需要配置即可,后面会根据无线路由使用时的需要来定义防火墙规则。如果这里选择了2,可能会导致能够连接ADSL却不能访问网络的情况
  • Accept these settings and adjust configuration files? – 是否写入配置文件,输入“y”写入
完成后,就可以尝试连接ADSL了:
  1. [root@alarmpi ~]# pppoe-start
复制代码
断开则可以使用:
  1. [root@alarmpi ~]# pppoe-stop
复制代码
可以通过
[root@alarmpi ~]# pppoe-status来查看连接状态。
ADSL成功连接后,可以通过ping一个服务器的域名来检查一下是否能够正常连接。如ping一下百度的服务器,成功的话就会出现百度的ip和连接耗时等信息:
  1. [root@alarmpi ~]# ping baidu.com
复制代码
如果能够ping到服务器的ip,并且能够接收到返回的数据包即说明ADSL连接可以正确使用了。但是如果不能ping到服务器的ip,可能是DNS的配置不正确。如果能够看到ip却接收不到返回的数据包则可以是防火墙配置出了问题(在pppoe-setup配置防火墙时选择了2可能会导致这种情况)。如果实在找不到什么问题,可以再尝试使用pppoe-setup来重新配置一下。
配置之后,可以将下面3个文件进行一下备份,以后如果重新刷系统,可以直接将它覆盖到原来的位置就可以省去配置了:
  • /etc/ppp/pppoe.conf
  • /etc/ppp/pap-secrets
  • /etc/ppp/chap-secrets
ADSL连接上后就要把刚才临时建立的“/bin/echo”程序的软链接删掉,否则会导致后面系统升级出错:
  1. [root@alarmpi ~]# rm /usr/bin/echo
复制代码
有了网络,就可以进行系统更新了。进行系统更新时第一个想到的就是更新源的问题,而pacman的更新源链接配置文件是/etc/pacman.d/mirrorlist。里面就列出了上面提到的更新源列表中的地址。起初的时候,我想当然地把China更新源链接前的注释去掉,把默认的注释掉,强制让它从中国的更新源进行更新。后来仔细看了一下这个文件里的第一个更新源地址才发现是基于Geo-IP的,也就是说从这个地址进行更新时,服务器会通过发出请求的机器IP的地理位置和各个更新源的负载情况来选择最佳的更新源,于是我果断地China更新源链接注释掉,只保留了基于Geo-IP的那个链接就好了。这样可以避免因为某个更新源负载大或down掉而影响更新速度。
更新源有了,就可以系统更新:
  1. [root@alarmpi ~]# pacman -Syu
复制代码
系统更新比较耗时,具体时间的长短跟系统的新旧程度。系统越旧更新所用的时间自然就越长。
更新完系统后,还有需要做一个设置,让RPi在每次启动的时候都自动连接ADSL网络。由于新版的Arch Linux已经停止了对initscripts的支持,并切换到纯systemd来管理启动程序及系统配置,所以我也使用了systemd来对启动进行配置。虽然没用过initscripts,但感觉systemd也不像有些人认为的那样违反人道。
其实在安装re-pppoe时,软件包的安装脚本已经自动生成了一个ADSL的启动配置文件/usr/lib/systemd/system/adsl.service,可以直接使用它来控制ADSL连接。systemd对服务的管理操作和CentOS中使用service命令很相似,是通过systemctl命令来实现。如要连接ADSL,除了上述提到的pppoe-start外,还可以:
  1. [root@alarmpi ~]# systemctl start adsl
复制代码
断开ADSL则用:
  1. [root@alarmpi ~]# systemctl stop adsl
复制代码
而需要在系统启动时自动连接ADSL,直接enable即可:
  1. [root@alarmpi ~]# systemctl enable adsl
复制代码
不需要在系统启动时连接ADSL,就可以通过disable来禁止:
  1. [root@alarmpi ~]# systemctl disable adsl
复制代码
使用systemd 的好处是它提供了统一的管理接口,和CentOS中使用service来管理系统服务非常像,但systemd配置文件书写起来比service的脚本文件要更简单方便。后面的制作过程中还会更深入地使用systemd来管理启动程序之间的依赖关系。
在重新启动或关闭系统前,需要修改/boot/config.txt为上述提到的内容。因为系统更新的时候,如果内核被更新了,config.txt文件的内容也会被覆盖了。否则下次启动的时候又可能出现黑屏。

原文来自:
http://gutspot.com/2013/01/28/%E ... %E7%B3%BB%E7%BB%9F/
riaqn 发表于 2013-5-24 08:20:39 | 显示全部楼层
很好的设想!可惜的是一般的usb网卡信号都太弱了。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )