日度归档:2013年6月24日

为ArchLinux增加/etc/rc.local启动脚本

因为打算手动写Pi的IP地址,于是很自然的打算vi /etc/rc.local,结果左下角出现了“新文件”的提示,然后我就纠结了,别这样,连自启动的脚本都没有了……我还怎么玩?

经过一番Google,在Ubuntu的论坛上发现了一个指导(为毛Arch的问题跑到Ubuntu的论坛去了):

http://forum.ubuntu.org.cn/viewtopic.php?f=155&t=395231

3楼说明了解决的办法:

修改/etc/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local Compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local
TimeoutSec=0
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

如果是简单的自定义命令,可写入/etc/rc.local,用上面的方法来处理。然后使用

systemctl enable rc-local.service

来启用这个脚本的服务。

不得不说ArchLinux这种管理方式也是相当的出色,但是因为刚接触,导致命令相当的不熟悉,让我控制的非常不舒服……

给派换了个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

然后就基本上能用了。