在Steam Link盒子上安装OpenWrt包管理器opkg

Steam LinkV社出的一款游戏流式盒,可以将电脑游戏无线传输到电视上,也可以当成无线显示器用。在VirtualHere的加持下,甚至可以远程传输各种USB设备。由于底层基于Linux,在安装应用后也可以完全脱离PC使用。尽管官方提供SDK,似乎没有什么人真的去开发应用。同时受限于性能,可玩性不算很高。不过,由于硬件规格十分接近路由器,在上面跑个OpenWrt环境是完全可行的。

打开ssh

根据SDK里面的教程,在格式化成FAT32的U盘里面创建目录\steamlink\config\system,里面创建文件enable_ssh.txt,将其插入Steam Link后开机,通过root密码steamlink123即可登录ssh。

搭建OpenWrt环境

下载OpenWrt固件

由于CPU基于ARMv7,可以使用到OpenWrt官网下载mvebu/cortexa9的固件,这里以Linksys WRT1200AC为例,在Linux环境下(WSL就行)下载linksys-wrt1200ac-squashfs-sysupgrade.bin,应该会得到类似openwrt-xxx-sysupgrade.bin的文件。

解包固件

sysupgrade固件分为两层,最外面是未压缩的tar,里面是squashfs,直接对其解包:

1
2
3
tar xf openwrt-xxx-sysupgrade.bin
cd sysupgrade-armada-385-linksys-caiman
unsquashfs -f -d openwrt root

经过此操作后,固件内容就会被解包到openwrt/里面:

1
2
$ ls openwrt
bin dev etc lib mnt overlay proc rom root sbin sys tmp usr var www

添加启动脚本

进入openwrt目录,创建文件chroot.sh,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SHELL=ash #如果已安装zsh之类的shell,可以在这里替换成zsh
MY_PATH="`dirname \"$0\"`"
cd $MY_PATH
HOME=/root
if [ ! -f dev/null ]; then
mount -t proc proc proc/ || true
mount -t sysfs sys sys/ || true
mount -o bind /dev dev/ || true
mount -o mode=1777,nosuid,nodev -t tmpfs tmpfs tmp/ || true
mkdir -p var/run
mkdir -p var/lib
mkdir -p var/log
mkdir -p var/lock
mount -o mode=1777,nosuid,nodev -t tmpfs tmpfs var/run || true
fi
if [ $# -eq 0 ]; then
chroot . $SHELL
else
chroot . "[email protected]"
fi

重新打包

打包的重点是要保留符号链接,因为几乎所有的Linux命令都指向busybox,这里使用.tar.gz可以很好的满足要求:

1
tar czf openwrt.tar.gz openwrt

传输文件到Steam Link里

Steam Link根目录下大部分地方为只读文件系统,所以直接将OpenWrt安装到根目录是不可能的,这里需要变通一下,将其装到可写的/home/apps

1
scp openwrt.tar.gz [email protected]:/home/apps

其中xxxx为大写的序列号后四位,可以在包装上看S/N,也可以在Steam Link界面设置->系统里面查看。

进入OpenWrt环境

ssh登录Steam Link,运行以下命令:

1
2
3
4
5
6
7
cd /home/apps
tar xzf openwrt.tar.gz
cd openwrt
rm var
mkdir var
chmod +x chroot.sh
./chroot.sh

熟悉的ash界面出现了:

在这个环境中,可以很方便的用opkg安装、卸载软件包,使用方法跟OpenWrt完全一样。

安装oh-my-zsh

既然有了opkg,换个好用的shell是必不可少的。运行以下命令:

1
2
3
opkg update
opkg install zsh curl ca-bundle git-http
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

编辑chroot.sh,将ash替换成zsh,重新运行./chroot.sh,就可以看到oh-my-zsh生效了:

安装服务类应用

如果需要安装开机启动的应用,必须从OpenWrt外部启动。以nginx为例,首先创建必需的文件夹:

1
2
mkdir -p /var/log/nginx
mkdir -p /var/lib/nginx/body

运行nginx,如果没有报错,尝试在浏览器中访问http://steamlink-xxxx/,如果能打开页面,说明安装成功:

输入exit退出OpenWrt环境,创建文件/etc/init.d/startup/S90nginx,加入以下内容:

1
2
#!/bin/sh
/home/apps/openwrt/chroot.sh nginx

运行/etc/init.d/reboot.sh重启Steam Link,等待完成后如果能通过浏览器访问nginx,说明自启动服务创建成功。

文章目录
  1. 1. 打开ssh
  2. 2. 搭建OpenWrt环境
    1. 2.1. 下载OpenWrt固件
    2. 2.2. 解包固件
    3. 2.3. 添加启动脚本
    4. 2.4. 重新打包
    5. 2.5. 传输文件到Steam Link里
    6. 2.6. 进入OpenWrt环境
  3. 3. 安装oh-my-zsh
  4. 4. 安装服务类应用
|