WSL2 下 Github-pages 容器运行

Windows 10 2004 + WSL2 来了;尝试把之前的 Ubuntu 18.04 更新到 wsl2 版本,没成,直接新装 Ubuntu 20.04 吧。

WSL2 安装、更新:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2

Ubuntu 20.04 LTS,之前直接下载 appx 的链接不可用,这个 Issue 有讨论。所以从 Store 下载的,开始菜单直接启用就行。

  • 进入 wsl Ubuntu,再任一 Powershell、cmd 窗口敲 wsl 就行,比如 VSCode 的终端窗口。
  • 关闭 wsl Ubuntu,运行 wsl --shutdown

接下来就是 Ubuntu 的原生体验了,Docker 安装按官方说明就行。由于 WSL 目前还不能使用 Systemd,见 Blockers for systemd;目前服务管理使用 init script

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce
sudo usermod -a -G docker $USER

# 启动 Docker 服务
sudo service docker start

# 默认启动 Docker 服务
sudo update-rc.d docker defaults

# 如果要配置 Docker Service 的代理,修改服务脚本
/etc/init.d/docker

接下来,基于官方的 ruby 做个 github-pages 镜像;然后,在博客工作目录下运行容器:

# Genfile
source 'https://rubygems.org'
gem 'github-pages'

# Dockerfile
FROM ruby:2.7.1-alpine
RUN apk --update add --no-cache build-base
ADD Gemfile .
RUN bundle install

WORKDIR /blog
EXPOSE 4000
CMD ["bundle", "exec", "jekyll", "serve"]

# 运行服务
docker run -t --rm -v "$PWD":/blog -p 4000:4000 github-pages

浏览器访问 http://localhost:4000 就可以了。

参考:

每周技术文章 No.247 2020.1.13-5.5

产品、项目

前端、交互

后端、系统、存储、网络

硬件、设备

个人、团队

Oneplus 7T 变砖修复

这纯粹是隔离在家瞎折腾出的事故,做个备忘。

手机是 Oneplus 7T,习惯用 OxygenOS,之前几代还追 Public Beta 版,随着系统完善,不是 Android 跨代,就不尝鲜了。但是官方小版本更新,还是得有。

  • 原来是 O2OS 10.0.7,补丁到 2019.11
  • 看镜像网站,发现 10.0.7 更新,补丁到 2019.12;忽略了其实是 H2OS,结果就给升了。
  • 启动后发现错了,不能降级到 O2OS 10.0.7,因为同版本 H2OS 往往比同版本的 O2OS 要新(内部版本或时间不同)。
  • 尝试使用 OnePlus Updater 强制更新到刚发布 OTA 的 10.0.8,结果重启,一晚上没进系统;只能寻求恢复。
  • 进 Recovery 模式清缓存、数据,能恢复到 H2OS,是上一版系统;但不死心,想刷回 O2OS。
  • Android 在 project treble 改造后,分区形式有所变化,分离了 android 系统、驱动、厂商定制等分区,便于 android 系统的更新。这个模式下也移除了 Recovery 下直接刷用户分区 zip 或 adb update,需要走 fastboot 模式。
  • 而 fastboot 刷机需要的镜像跟官方默认刷机包不同,社区有人专门定制了 Oneplus 最近系统的 Fastboot 镜像,如 Stock Fastboot ROMs for OnePlus 7T,但是需要 Unlock 才能正常刷,于是:
    • 进 H2OS 初始化,进开发者菜单,关 OEM Lock 锁。
    • 进 Fastboot 模式,连 PC,执行 fastboot oem unlock
    • 解压 fastboot 包,执行 flashall.bat,没报错,可以进 O2OS 了。
    • 很高兴,但是这时 bootloader 还是 unlock 的,每次手机启动都有警告提示,不好。
    • 于是进 fastboot,连 PC,执行 fastboot oem lock
    • 重启,红色提示,boot 损坏,不允许启动,而且 10 几秒自动重启。
    • 此时,电源关机、电源+音量下都没效果。
    • 感觉凉了,真变砖了… 已经再思考是不是得再买个了…

一阵慌张,感觉之前大部分操作都没问题;只不过刷过 fastboot 镜像后,虽然标称 Stock 版本,但还不是完整官方镜像,还需要触发官方升级之后,确保官网镜像再 Relock。另外,如何跳出反复重启,进 Fastboot 模式。

整理后的操作如下:

  • 反复重启状态下,按住电源+音量上下三建,可进 Fastboot 模式。
  • 先 Unlock,fastboot oem unlock;再进 Fastboot 刷机。
  • 下载初始版本 Fastboot 镜像,比如这里的 10.0.3;还是执行 flashall.bat
    • 注意,升级过程有一次重启到 Fastboot,执行的是 fastboot boot fastboot,实际上手机进的是 Recovery 模式;保持不要操作,不要手动再进 Fastboot。
    • 在 Recovery 下完成 System 及后面几个 img 写入才对。
  • 完成后可以进入 O2OS,进系统更新升级;这时会弹出,识别到 Unlock 状态,需要下载完整系统镜像,不错;等自动更新重启完,进入系统,发现还是 10.0.3。
  • 这时,再进 Fastboot,连 PC,执行 fastboot oem lock
  • 重启,顺利启动,进入系统;再进开发者菜单,确保系统 OEM Lock 锁打开。
  • 终于恢复官方状态了。
  • 再执行一次系统更新,终于回到 O2OS 10.0.7 了。

折腾下来,又更新了一下对 Recovery、Fastboot 的理解,还有 Android 的镜像现状,从 flashall 的过程看一下:

aop.img
aop.img
bluetooth.img
boot.img
dsp.img
dtbo.img
LOGO.img
modem.img
oem_stanvbk.img
qupfw.img
storsec.img
multiimgoem.img
uefisecapp.img
recovery.img
vbmeta.img
vbmeta_system.img
opproduct.img
boot fastboot 
system.img
vendor.img
product.img

另外用到的 Android 工具:

Windows WSL 下配置 jekyll 运行环境

家里电脑更新成了 NUC10 i7,系统也就迁移到了 Windows 10。由于 WSL 对 Linux Docker 的支持要 Windows 20H1 内建的 WSL2 才行;之前工作很少使用。借着运行 Jekyll + Github Pages 运行环境,也算用起来了。

安装 WSL 功能,需要重启:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

下载安装 Ubuntu 18.04 镜像:

curl.exe -L -o ubuntu-1804.appx https://aka.ms/wsl-ubuntu-1804
Add-AppxPackage .\ubuntu-1804.appx

然后开始菜单就能看到 Ubuntu 18.04,启动完成初始化,就进入 Linux 环境了。

# 基础依赖包,都安装到系统里
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ruby-full build-essential

# 当前版本
$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
$ gem --version
2.7.6

# 从 gems 开始,安装到用户目录下
$ export GEM_HOME="~/.gems"
$ gem update
$ gem install bundle

$ bundle --version
Bundler version 2.1.4

# bundle 的 gems 配置,配置文件写在 .bundle/config
$ bundle config set path "~/.gems"
# 通过 bundle 安装依赖,其实只有一个 github-pages
$ bundle install

# 然后就可以 ?
$ bundle exec jekyll serve

还不行,这里会报一个 apply2files 的权限错误:

jekyll 3.8.5 Error: Operation not permitted @ apply2files - /mnt/c/…

这是因为 WSL 默认挂载 C: 的权限问题,需要重新 mount;持久化配置要修改 /etc/wsl.conf,重启生效。

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

# /etc/wsl.conf
[automount]
enabled = true
options = "metadata"

然后就可以愉快的:

bundle exec jekyll serve

新一代的 SSD、CPU 真是快了很多…

每周技术文章 No.246 2019.12.23-2020.1.12

前端技术,界面、交互

后端技术,操作系统、虚拟化、存储、网络、桌面

硬件设备,ARM、终端、移动、智能设备、安全

  • 可用于 Raspberry Pi 的 SDR 软件镜像,软件定义无线电(SDR),RTL-SDR、LimeSDR、PlutoSDR,Airspy 和 Airspy HF,不明觉厉啊。
  • 可可读 OpenChannelSSD之一,简介,这系列不错,Open Channel SSD 是“简化到没有传统 SSD 的核心功能 Flash Translation Layer(FTL), 只包含裸 NAND 芯片和控制器”;对于希望根据业务需求进一步挖掘硬件能力的系统、存储服务商来说,选择更多了。

团队建设

每周技术文章 No.245 2019.12.09-22

前端技术,界面、交互

后端技术,操作系统、虚拟化、存储、网络、桌面

硬件设备,ARM、终端、移动、智能设备、安全

团队建设

每周技术文章 No.244 2019.11.25-12.08

前端技术,界面、交互

后端技术,操作系统、虚拟化、存储、网络、桌面

硬件设备,ARM、终端、移动、智能设备、安全

市场、产品、项目

团队建设