• 希望你能勇敢追求自由,去成为海贼王。

2021年6月8日星期二

最近学习的一些IT的东西

 1. 文件系统,特别是 overlay FS。

    主要解决的问题是某个目录空间不够了,从其他文件系统下面挂一个文件夹过来。ubuntu官方给了三种方案,一种是--bind,一种是软链接ln,还有一种就是overlayFS。恰好今年二月份的时候折腾中兴手机,想要remount system为可读写,发现中兴手机的方案就是overlayFS,所以就好好把这个overlayFS学习了下。

    简而言之,这个overlayFS就是可以有多层的lowerdir,然后一层的upperdir,还有就是临时目录workdir,最终挂载以后,挂载目录可以看到的内容就是所有层叠加起来,然后上层会覆盖下层,并且只有upperdir的内容可以修改,其他层都不会动,就算你删除的文件在某层lowerdir,它也知会在upperdir内创建一个占位文件,这样你最终看到的内容以为它被删掉了。

    这个的用法,目前我想到的就两个:一个就是像中兴手机这种,就算你remount了,还是保持相关的文件夹内容无法修改,重启就恢复了。另外一种就是保持系统的还原点,比如我安装了armbian到我的开发板SD里面,然后再用overlayFS把我的移动硬盘挂载到usr,var,etc,lib甚至home目录,这样后续我所做的修改都在移动硬盘里面,如果要恢复出厂设置,直接umount掉就可以了。

    再补充下,最近看的docker的一些unionFS理念,跟overlayFS也有一些异曲同工之妙,分层存储,下层不允许做改动。

2. docker

    这几个东西放到一起来说,都是在docker学习过程中遇到的。

    docker基本过程就是拉取镜像,然后在这个镜像的基础上起一个容器,将一些网络端口,文件系统映射到主机的端口和文件,然后就可以跑起来了。基本上就是安装APP的一种新方式。

    docker的镜像打包过程,选用一个基础包,或者从scratch也就是从零开始,然后执行一些命令,变更一些内容。

    因为支持的CPU构架不一样,arm可用的镜像和x86,以及64位和32位,可用的镜像并不一样,当然有的镜像可以支持两种架构。

    此外还有docker可用的网络架构,分为bridge和macnet,openwrt就要用macnet网络。两种都是桥接,macnet需要把网卡改成混杂模式,然后macnet对于外部网络就像一个单独的网卡,主机的网卡也需要写入相应设置。

3. WSL,hypvisor。

    最后说到WSL, 分为1和2. 微软的东西,主要是想在微软的windows上面创建一个linux的环境。WSL 1主要思路还是把linux的内核跑到windows内核上面,这样避免了hypvisor虚层,而且文件系统也是紧耦合的。WSL 2直接就是把微软自己的hyper-V拿出来,并且创建了ext4的硬盘镜像,相当于创建来了虚拟机。

    然而hyper-V和普通虚机软件如qemu,virtualbox,vmware也有不同,它是直接把自己置于了windows的底层,这样相当于windows自己也是跑在hyper-V上面的一个虚机,和WSL2起来的linux处于兄弟关系,而不是父子关系。

    因为docker是基于linux上面开发的,如果windows上面要安装,就需要启动WSL2。

4. Android和Openwrt编译,HAL。

    上周末自己编译了lineageos 18.1的固件,刷入了我的小米6,目前跑起来还正常。也编辑了小米4A千兆版路由器的固件,没有刷入。

    android的编译,主要有一步是需要获取专用的驱动文件,也就是vendor下面的一些so文件,这个可以从手机里面提取,但是我提取过程中失败了,失败的原因后来找到是因为没有装patchelf且没有关闭seLinux,最后从其他人编辑的刷机包里面提取的。这些私有文件是我存疑的地方,因为不是开放源代码的,所以是否可能有漏洞?

    这里也要说一下HAL,android的驱动方式,hardware abstraction layer,将上层应用与底层硬件隔离。这个在下载的源代码里面也可以看到,但是离能写这些代码还好远。

    openwrt的编译过程,主要是有一个feeds比较特殊,需要将除openwrt固件本身之外的其他第三方app的代码也拉取下来,然后一起编译。还有一个就是下载dl库。这两个步骤,在国内执行可能比较困难。

5. ssh

    ssh本身没有太多东西,主要是有一种登录方式是用key来登录,就是生产私钥和公钥,私钥自己保存,公钥放到需要登录的服务器.ssh目录下面authorized_keys文件里面。这样ssh的时候,可以不需要用用户名密码认证。

6. termux,包管理系统

    termux是一个神奇的东西,android上面的一个终端,但是有包管理系统,可以装一些包扩展功能。第一步就是换源,官方默认的源好像已经挂了很久了。然后就是装openssh服务器,这样就可以在电脑上面直接ssh登录操作了。

    termux,ubuntu,openwrt各种linux开发版都有自己的包管理系统,用类似的命令可以安装扩展,它会识别依赖,自动安装。

    termux还可以通过安装qemu虚机,虚拟alpine,然后跑docker。之所以不能直接跑,是因为android去掉了cgroup和namespace等模块。

没有评论:

发表评论