如果只想查看如何配置 ish,可点击右侧目录中的【ish shell 和 Alpine linux】跳转到教程部分

 

本文将记录使用 ish shell 的契机、基本使用方法和常用环境的配置,以及一些流水账。要不是自己的网站,这样的标题以及这样的行文顺序,怕是要被喷死:0

 

故事还要从 UTM 正式上架 AppStore 说起

 

前言

很早之前,大约是在 2021 年的时候就接触到了 UTM 。彼时,由于一些原因,大约 1 个月中会有一两天需要用到 windows, 于是便在电脑中安装了 UTM。而当时选择 UTM 最重要的原因就是免费。像 Parallel Desktop 这样的专业虚拟机固然好用,但它选择了我最讨厌的订阅制而不是买断制,而且对于我的使用频率来说,一年 400+ 的费用也显得很不划算。

utm
utm

 

沉寂

由于 UTM 不想 PD 那样只需点点点就可以完成虚拟机的安装,在配置 win10 虚拟机的过程中,免不了需要查阅大量的资料解决问题。在这过程中,发现 UTM 也可以通过 AltStore 安装到手机中。于是,在好奇心的驱使下,也尝试了在手机上安装了 UTM 以及 xp / ubuntu 系统,但当时的运行速度真的让人热泪盈眶。于是在收好这一不错的 玩具 后,与虚拟机的故事便陷入近 3 年平淡的沉寂。

 

契机

缘起缘灭,都需要沉淀,也需要契机

2024 年 6 月,在好友 J 的邀请下,一起参加了深圳人力资源部发布的培训课程,各自选择了周末上的课程。当时我怀着做个“机器人”的小小梦想,选择 C语言 以及 嵌入式。

教室
教室
配置imx6ull
配置imx6ull

这两门课程都需要大量的练习,于是便想要利用上下班的通勤时间进行练习。此时,又动了手机上安装一个 linux 环境的心思。其实,如果只是要练习 C 编码,那只需要装个热门的编辑器像 Sololearn 或者 C/C++-programing languages 就足够,但嵌入式还涉及到 asm 、库的链接、编译等;等等,还有 cmake (makefile是我见过最恶心的东西) 。那这些就必须要求一个完整的 linux 环境了。

这里需要说明一下,嵌入式的开发在目前的我看来,尽管几乎所有的课程老师都会要求装一个 linux 虚拟机,但实际并不是一定需要。因为安装 linux 的目的是使用 arm 芯片的交叉编译工具链,但如果我们去 arm 的 官网 查看,就会发现其中其实也提供了 windows 和 mac 下的编译工具链,于是当时整个学习过程我都仅使用 mac 下的 arm gcc toolchain,以便剩下近 20G 的硬盘空间

但是,如果是正经开发,还是使用芯片/主板厂商提供的 linux 镜像会比较方便,因为厂商往往在其中集成了大量常用的工具/命令。

但,由于对 ios 下 UTM 的龟速记忆尤新,便首先将其排除在我的选择之外。此时,B站的推荐算法将 ish 摆在了我的眼前。

 

ish shell 和 Alpine linux

起初,我以为 ish shell 只是像 stash 一样,只是模拟 linux 命令的执行,直到我安装 python 尝试了http服务的启动命令:

1
python -m http.server 8080

然后在 Safari 浏览器中看到了执行结果,我才确定它真的是一个完整的linux系统。

在ish中执行python命令
在ish中执行python命令

更重要的是,它非常地轻量快速,在运行绝大部分的脚本时候,手机也不会发烫(除了守在手机上运行视频、图片处理相关相关的任务)。而它如此优秀的原因是因为使用了非常轻量的 Alpine Linux

需要注意的一点是,从它的自述中发现,在 alpine linux 中包管理器是 apk 而不是与 ubuntu 一致的 apt。

Simple

Alpine Linux is a very simple distribution that will try to stay out of your way. It uses its own package manager called apk, the OpenRC init system, script driven set-ups and that’s it! This provides you with a simple, crystal-clear Linux environment without all the noise. You can then add on top of that just the packages you need for your project, so whether it’s building a home PVR, or an iSCSI storage controller, a wafer-thin mail server container, or a rock-solid embedded switch, nothing else will get in the way.

ish 安装

请通过 App Store 进行安装即可:

或者:

 

常用环境的安装和配置

由于包源在国外,如果安装速度较慢,需要自备 魔法 才可以快速安装哦。

vim

虽然在非 ssh 连接服务器的情况下,它就是个废物,但学习下还是有必要的。

1
apk add vim
vim的安装及运行
vim的安装及运行

python

运行命令:

1
apk add python3

等待安装完成后可以输入 python3 即可验证安装结果,如果你希望通过 python 而不是 python3 运行,可以执行以下命令

1
ln -s /usr/bin/python3 /usr/bin/python

, 之后就可以通过输入 python 直接运行 python 了。

python
python

pip

运行命令:

1
apk add py3-pip

等待安装完成后,就可以通过 pip 包管理器,为 python 环境安装需要的 package。

pip
pip

gcc 、 cmake以及基础的 C 开发环境

依次运行以下命名即可安装 gcccmake

1
2
3
apk add gcc

apk add cmake

运行完成后即可运行 gcccmake。

gcc以及cmake
gcc以及cmake

 

但是,如果我们此时进行编译,会因为连基础的头文件如 stdlib.hstdio.h的区别都没有而报错。此时我们需要安装C怨言的基础开发环境。

于是,我们需要通过运行以下的命令开保证系统有几本的头文件:

更新包的列表:

1
 apk update

 

安装 build-base 元包,它包含 gccmusl-dev(C标准库)、makebinutils 等必要工具, 等等,如果这样,那前面的我们是不是白安装的gcc和cmake,不管了,继续

1
 apk add build-base

然后我们可以测试一下:

1
 touch test.c

输入在 test.c 中输入:

1
2
3
4
5
6
#include  <stdio.h>

int main() {
printf("Hello, Alpine!\n");
return 0;
}

进行编译并运行:

1
2
3
gcc test.c -o test

./test
编译并运行c文件
编译并运行c文件

 

一些常用的按键组合

在一些情况下,我们需要使用组合键来达到中断、退出程序的目的,比如说 ctrl + c / ctrl + z

那么我们可以先点击键盘上的 ^ 然后点击按键组合的另一个键。如 ctrl + c,则可如下图所示,先点击 ^ ,再点击 C 即可。

ctrl + c
ctrl + c