千呼万唤始出来:ArchLinux for Espressobin

前言

原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。

本文使用Markdown写成,为获得更好的阅读体验和正常的链接、图片显示,请访问我的博客原文:

http://www.cnblogs.com/sjqlwy/p/me_archlinux.html

前文刚吐槽完官方没有一个友好的操作系统镜像,连第一次开机上电都这么折腾,虽然陆续提供了buildroot、Yocto、OpenWrt的预编译镜像,但是基本上不包含必要的软件包,需要自己设置,体验并不好。而这次,终于有了开箱即用(out of the box)的ArchLinux,并且archlinuxarm官网支持,可以方便地升级。

0. ArchLinux

估计大家用的最多的就是Debian系、Arch系和RedHat系的Linux发行版,前两者用得较多,但还是期待基于Debian的专为嵌入式设备优化的Armbian系统早日正式适配espressobin。

1. Archlinux简介及其优点

  • 小、快、可定制,安装完默认没有图形环境,可以根据自己的喜好进行配置,也因此对新手不甚友好。
  • 相对于Debian的稳定,Arch使用滚动升级,拥有较新的内核与软件版本,虽然操作不慎也会滚死。
  • ArchWiki知识库太强大了!
  • 拥有aur包,有很多热心网友打包各种软件包

2. 为Espressobin 安装ArchLinux

ArchLinuxARM页面可以下载到最新的镜像,并查看安装指南,国内可能有地方访问该网站打开速度较慢,移步Espressobin相关页面也一样。

  • 软件需求:alarm镜像;Linux主机系统(虚拟机或者其他装有linux的开发板都行)
  • 硬件需求:MicroSD存储卡+读卡器 或者 U盘

2.1 在SD卡上创建文件系统

插入MicroSD卡后,使用lsblk命令查看存储设备的名称,比如sdb务必不能选错,否则可能会破坏宿主机上的数据:

  1. 清空SD卡:dd if=/dev/zero of=/dev/sdX bs=1M count=8

  2. 创建新分区:(echo n; echo p; echo 1; echo ''; echo ''; echo w) | sudo fdisk /dev/sdb

  3. 格式化新分区为EXT4文件系统:(e2fsprogs < 1.43)sudo mkfs.ext4 /dev/sdb1; (e2fsprogs >= 1.43)mkfs.ext4 -O ^metadata_csum,^64bit /dev/sdX1,和官方指南不同,推荐后者。

  4. 创建目录并挂载新分区:sudo mkdir -p /mnt/sdcard && sudo mount /dev/sdb1 /mnt/sdcard

  5. 解压预下载的ArchLinuxARM镜像root文件系统(使用root而非sudo):

    cd /mnt/sdcard
    sudo su
    bsdtar -xpf /PATH/TO/ArchLinuxARM-espressobin-latest.tar.gz -C .
    # tar -xzf /PATH/TO/ArchLinuxARM-espressobin-latest.tar.gz -C .
    sync # 由于多达上万个文件,为避免缓存没有完全写入SD卡,可以强制同步一次,否则有可能启动失败。
    

    注意,espresso使用tar,解压时会有错误提示,虽然不影响最后使用?但这里推荐bsdtar。

    进阶阅读:What are the differences between bsdtar and GNU tar?

  6. 弹出SD卡:umount /mnt/sdcard

2.2 更改U-boot设置

参考官方关于串口的设置,DC供电,MicroUSB线接电脑USB口,使用minicom(Linux)或XShell(Windows)打开串口,稍等片刻回车可以看到Marvell>>界面。

输入以下命令:

mmc dev 0
ext4load mmc 0 $loadaddr /boot/uEnv.txt
env import -t $loadaddr $filesize
saveenv
boot

即可启动,并且自动记住设置,不用像Yocto或者buildroot那样手动输入run bootmmc

2.3 默认系统设置

  1. 默认账户密码:alarm:alarm,root:root。alarm是ArchLinuxARM的意思吗,不过也有警告的意思~默认SSH无法以root用户登录,Serial可以。没有自带sudo,可以用su切换。
  2. 所有网卡由systemd-networkd进行管理,配置文件位于/etc/systemd/network
  3. USB 3.0接口旁的网口是WAN口(带红点的),用来配置为连接网络。通过wan.network进行配置。The eth0.network file is required to bring up the link on the eth0 interface to bring up all three ports.
  4. 余下两个以太网接口是lan0和lan1,合并为br0接口,使用静态IP 10.0.0.1,通过lan.network、br0.network和br0.netdev进行配置。
  5. br0用于与WAN接口进行网络地址转换,默认启用IP地址转发。
  6. 开机自动启动dnsmasq服务,可以为br0接口提供DHCP服务,分配IP地址范围:10.0.0.5-10.0.0.250。

3. 配置使用ArchLinux

由于手头木有路由器,仅有USB无线网卡两个:Edimax EW-7711UTn (RT3070芯片) 和 小米随身wifi (mt7601u芯片),以及一根网线。初步设想是一根网线连接与笔本直连,然后共享无线网,然而因为有三个网口,方案失败,准备后续折腾。第二种方案就是使用无线网卡啦,由于没有那种mini PCI-e接口的,就用手头现有的就成。buildroot和Yocto默认都没有编译进无线网卡驱动,想要使用需要自己重新编译。但是这次的ArchLinux算是比较完整的操作系统,真正开箱即用,插上无线网卡就能识别。以下命令大多需要root权限,可以su后输入密码root以获得相关权限,后期使用sudo。

3.1 连接无线网络

3.1.1手动连接无线网络

由于没有路由器插不了网线,初始只能使用MicroUSB数据线进行串口登录,我们插上RT3070发现可以直接识别,连接我们的无线网络。具体请参考ArchWiki | Wireless network configuration

基本的网络控制工具如下,这些用户空间工具可以对无线连接进行完整控制。

  • iw - 仅支持 nl80211 标准,不支持老的 WEXT (Wireless EXTentions) 标准。如果 iw 没有显示网卡,可能是这个原因。
  • wireless_tools - 已经过时,但是依然广泛使用。WEXT 设备使用此工具。
  • wpa_supplicant - 提供 WPA/WPA2 加密支持,同时支持 nl80211 和 WEXT。
lsusb # 查看是否识别设备,如果没有,可以进一步dmesg或lsmod查找相关问题
ip link # 查看是否识别无线网接口,这里可以看到wlan0,。也可以iwconfig命令
ip link set dev wlan0 up # 默认没有自动启用wlan0,也可以使用ifconfig wlan0 up
iw dev wlan0 scan # 扫描周围无线SSID,确认无线网卡是否可以正常运行。也可以使用iwlist wlan0 scanning
wpa_supplicant -i wlan0 -c <(wpa_passphrase [your_SSID] [your_key]) # 连接无线网络,注意替换无线网名称与密码。查看调试信息后,如果成功连接,可以用Ctrl+C停止运行,并增加-B参数以使wpa_supplicant后台运行。
dhcpcd wlan0 # 向DHCP服务器为wlan0获取IP地址。、
iw dev wlan0 link # 查看无线网卡连接状态,也可iwconfig
ping -c 2 www.baidu.com # 确认是否连接到互联网

以上3、5、6步是必须的。经过以上步骤,即可以正常连接到无线网络。

3.1.2 自动设置无线网络

现在无线网基本都是wpa2加密,很少见到wep这种容易被破解的加密方式了,所以需要使用wpa_suppliant。ArchLinux目前使用Netctl来管理网络。除此之外还有Connman、NetworkManager、Wicd、Wifi Radar等,但是注意它们是互斥的,不能同时运行两个守护进程。其中Netctl使用控制台工具netctl和wifi-menu,netctl 与 systemd 一起工作。基于配置文件,可以检查和连接多种网络类型。使用简单,并不比图形工具难。 参阅: Netctl (简体中文)

使用wifi-menu -o命令来自动扫描无线网络并生成配置文件,生成的配置文件在/etc/netctl/目录下,-o参数避免明文保存密码。

输入相关信息后,可以看到生成的配置文件,且非明文存储密码:

此时一般已经可以直接连接到互联网,无需手动获取IP地址,如果不行,用方法一手动联网一次,再使用方法二。

如果想要开机自动启用无线并进行连接,可以运行如下命令:

netctl enable [profile_name] # 上面生成的配置文件,如wlan0-FAST_XXXX
netctl reenable [profile_name]

重启看看,是不是开机自动连上网啦。以上方法仅能固定连接某一个无线网,当然,因为Espressobin一般不会移动便携使用,位置固定,连接的无线网也相对固定,所以问题不大,如果你想在多个无线网络之间自动切换,可以参考ArchWiki。

3.2 增加sudo用户

你可以将alarm用户添加进sudo许可用户组,也可以新建一个自己喜欢的用户。

useradd xin
passwd xin
mkdir /home/xin
chown xin:xin /home/xin   
pacman -S sudo
nano /etc/sudoers # 或者运行visudo,在最后增加如下一行:
xin ALL=(ALL) NOPASSWD: ALL

Ctrl+O保存更改,Ctrl+X退出nano。此时新用户即拥有root权限,且切换时不需要密码。去掉NOPASSWD: 则每次需要输入密码。

3.3 安装管理软件

ArchLinux的软件包管理软件是pacman,类似apt 之于Debian, yum之于RH等。基本用法包括:

pacman -Syu && sync # 更新整个系统,新安装好要运行一次
pacman -Ss [软件包名称] # 搜索某个软件包信息
pacman -S [软件包名称] # 安装软件包
pacman -R [软件包名称] –nosave # 完全删除某个软件包
pacman -Scc # 完全清理软件包缓存

更多用法请参考ArchWiki | Pacman

3.3.1 更新软件源

和Windows不同,Linux系统安装软件一般只需要简单执行命令,就可以从软件服务器(软件仓库)把软件包拖回来自动安装,就像是从亚马逊或者京东购物一样。同样的,离家近,储量大、服务好的仓库配送货也快,我们选择最优的软件仓库,也可以加速软件包下载安装的速度。一般使用ustc的软件仓库,(PS:ustc源真的非常全,比清华还全)。

打开源列表,类似于Debian的/etc/apt/sources.list,该文件会告诉系统优先从哪里下载安装包:

sudo nano /etc/pacman.d/mirrorlist 

注释掉原来的,增加如下内容并保存:

Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo

后面一句莫名喜感,想起朝鲜误认为奥地利(Austria)是澳大利亚(Australia)并与后者断交的梗:

1976年8月18日,美韩小分队16人来到联合警备区内,准备砍倒一棵遮挡侦察哨视线的白杨树,结果朝鲜士兵夺走了美方的斧头,并砍死美军士兵二 人。美方立即指责朝鲜“蓄意谋杀”,要求驻韩、日和关岛等地的美国战略空军三级戒备,召回全部休假人员。而金日成也立即发布“北风1号”战争动员令,陆海 空三军进入战争状态。这就是著名的“白杨树事件”,或“斧头事件”。

充分部署后,美军派出64人,在36架武装直升机和700名韩军士兵的支援下,前往警备区强行砍倒那棵白杨树,并且泄恨般捣毁了数所朝军哨所。但全副武装的朝军士兵在金正日的要求下,一枪不发,使得一场大规模冲突迅速化解。

不过,朝方夺来的“美方凶器”——斧头上,写着“Made in Austria”(奥地利制造),却被翻译误译作“澳大利亚制造”。朝鲜因此愤然与澳大利亚断交。澳大利亚人当时一头雾水,直到2000年两国重新建交时才得以真相大白。

—— Via 铁血网

更改完毕后保存,使用sudo pacman -Syu完整更新一次系统,重启生效。

PS:更新过程中看到一个linux-espressobin软件包,搜索一下:

有三个相关包,自带头文件方便编译,还可以自动升级uboot,不错~

更新之后可以看到内核版本更新了:

最新的是2017年5月20号的版本,但是内核是4.4.69而非Espressobin官网的4.4.8。

默认开放端口如上图,也就是DHCP服务器和SSH服务器了。

3.3.2 加速pacman下载软件

参考Improve pacman performance,有点像aptfast。使用第三方下载工具加速软件包下载。其实更换国内软件源之后速度可以接受,而且多线程会增加服务器负担,所以如果不是速度慢的受不了,建议正常下载就ok。

3.3.3 爽歪歪的Arch用户软件仓库(Arch User Repository,AUR)

Arch用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入community仓库。好处是很多软件、驱动由其他用户打包上传,处理完各种依赖关系了。缺点是由于第三方打包,可能程序包质量良莠不齐。

更多信息及用法可以查看ArchWiki | AUR

3.4 设置语言格式(locale)和时区(timezone)

Locales 被 glibc 和其它需要本地化的应用程序和库用来解析文本(或正确的显示当前区域的某些文字样式,如货币,时间,日期,特殊字符和其他的区域格式)。有些程序需要指定语言,我们一般用en_US.UTF-8。

locale -a # 生成可用locales列表,保存在/etc/locale.gen中。我们反注释en_US.UTF-8 UTF-8一行。
locale-gen # 生成locale,保存在/etc/locale.conf中,重启生效。
localectl set-locale LANG=en_US.UTF-8 # 方法2,更简单一些。

使用date命令可用查看当前时间日期,默认使用的是UTC时间,我们需要进行更改。

timedatectl status # 检查当前时区
timedatectl set-timezone Asia/Shanghai # 修改时区

ArchLinux联网后会自动更新时间,我们只需要更改时区即可。更多详细信息请查看:ArchWiki TimeArchWiki

参考

posted @ 2017-05-26 21:09  思兼  阅读(4146)  评论(0编辑  收藏  举报