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
产品、项目
- 45 周岁、IPIP 的七年之痒与最坏打算,这种需要持续投入才能保持的好产品,应该有其对应的价值。
- 《JavaScript: The First 20 Years》,JavaScript 发展历史;正在进行中文翻译:语言诞生、创立标准。
- 《工业互联网体系架构 2.0 2020.4》。
- IKnowWhatYouDownload,我知道你 BT 下载过什么,哈哈。
- 《Designing Data-Intensive Application》,讨论了很多数据库、消息服务、批流处理等系统的设计要点;除了原版,还可以翻翻《设计数据密集型应用》中文翻译。
- 知妖(中国妖怪百集),我先翻翻九尾狐,感觉这得配着自说自话的总裁 - 山海經&上古傳說来看,呵呵。
前端、交互
- UI component series Button Design,按钮设计细节的讨论;另见中文翻译。
- 前端资源预加载,prefetch、preload,quiklink。
- HTML 全局属性列表大全,ES6 Math 方法和 Number 新特性简介,检测 DOM 尺寸变化 JS API ResizeObserver 简介,备忘。
- 通过 CSS 向 JS 传参来识别系统暗色、亮色主题(或者生效的其他属性),也可以使用
window.matchMedia("(prefers-color-scheme: dark)")
。 - 一个 PRD 的诞生 - 教新手设计一个顶级表单定制后台 PRD,比较完整的讨论。
后端、系统、存储、网络
- WannaRen 事件分析报告,“本次事件中的 WannaRen 勒索软件是国产攻击套件中的一部分”。
- 网络层绕过 IDS/IPS 的一些探索,理解 IPS 工作原理和现阶段主要限制来下手。比如,制造 TCP 分片、伪造 TCP 状态、跳过 rst 直接发送相应、使用 IPv6 等。
- 三年之久的 etcd 3 数据不一致 bug 分析,发现集群正常,各节点数据量不一致;数据写进 WAL 但是没进 DB,应该是 apply 异常被丢弃了,进一步发现开启鉴权时,AuthRevision 不一致会导致 apply 失败;是因为 auth 操作调用 commitRevision 后 consistentIndex 没有持久化,如果 etcd 重启了,权限写操作就会 apply 两次,于是 AuthRevision 就不一致了。修复的提交 PR #11652,还给出了相似问题的修复,和改进 apply 调试的提交。
- Redis 6.0 GA 了,来看看 Redis 6.0 客户端缓存特性及实践,完整需要
RESP3协议
客户端支持。 - 细数 redis 的几种 getshell 方法,一类是利用 Redis 写文件:开机自启动、计划任务、添加 SSH Key、WebShell;另一类是触发应用库反序列化过程中的漏洞,比如 Java 的 fastjson、Jackson 等;还有一个是 Redis <= 5.0.5 的 Lua RCE 漏洞,参考redis-rce。
- Monitoring Network Stack,分析了监控 Linux 网络性能的数据来源,还包括一个自定义脚本,输出 Prometheus 数据格式。
- Why strace doesn’t work in Docker,包括隔离和权限,使用
--cap-add=SYS_PTRACE
除了允许ptrace
系统调用,还需要允许其依赖的process_vm_readv
。docker 19.03 + Kernel 4.8 之后就默认允许 ptrace 了。 - OLAP 任务的并发执行与调度。
- Flink DataStream 关联维表实战,非常不错的应用分析。
- VXLAN 基础教程:VXLAN 协议原理介绍。
- 调度系统设计精要。
- Understanding Microsoft Security Baselines and Applying Them – Part 1,Part 2,可否应用?
- 谈一谈 Linux 与 suid 提权,尽量减少给程序
suid
权限,使用 capabilities 更精细的控制,setcap
。 - LISA2019 Linux Systems Performance。
- Rust 半小时教程。
- 时间序列异常检测算法梳理。
硬件、设备
- 树莓派集群的尝试,Five years of Raspberry Pi clusters;不过,还是对 Oracle 那个机柜印象更深,呵呵。
个人、团队
- 技术面试中,什么样的问题才是好问题? 很好的话题,这部分经验特别欠缺。
- 科普备用,Bash 脚本教程,一文带你了解 HTTP 黑科技。
- CS Visualized: Useful Git Commands,非常不错的 Git 命令动画表达。
- 技术人间自有法则在,专业、靠谱,生产系统出问题力求尽快恢复。
- 学习灾难,“定位准确、机理清楚、可以复现、措施有效、举一反三”,“工具化,通用化,标准化,自动化,数据化”,“定期做灾难演练”。
- 在线查毒工具 VirusTotal 的 N 种玩法——从“误报/漏报”聊到“攻击者对它的利用”,因为勒索病毒第一次知道了 VirusTotal,这个科普不错。
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 写入才对。
- 注意,升级过程有一次重启到 Fastboot,执行的是
- 完成后可以进入 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
前端技术,界面、交互
- CSS overscroll-behavior 让滚动嵌套时父滚动不触发,
overscroll-behavior:contain
,可以有。 - Logan Web:前端日志在 Web 端的实现。
- 如何进行 web 性能监控? 几个可以利用的 api,
Performance API
、PerformanceObserver
、MutationObserver
,用于计算白屏、首屏时间等典型性能指标。
后端技术,操作系统、虚拟化、存储、网络、桌面
- 一文了解 Text-to-SQL,这个应用有趣,目前准确率还比较低。
- Kafka 集群在马蜂窝大数据平台的优化与应用扩展,“基于 SASL/ SCRAM + ACL 增加了鉴权的功能”,“Lag 积压告警”,拆分原始 log 集群、全量订阅、个性定制多个集群,集群内为大 Topic 隔离 Brocker。
硬件设备,ARM、终端、移动、智能设备、安全
- 可用于 Raspberry Pi 的 SDR 软件镜像,软件定义无线电(SDR),
RTL-SDR、LimeSDR、PlutoSDR,Airspy 和 Airspy HF
,不明觉厉啊。 - 可可读 OpenChannelSSD之一,简介,这系列不错,Open Channel SSD 是“简化到没有传统 SSD 的核心功能 Flash Translation Layer(FTL), 只包含裸 NAND 芯片和控制器”;对于希望根据业务需求进一步挖掘硬件能力的系统、存储服务商来说,选择更多了。
团队建设
- DevOps 建设的思考和实践,使用了SonarQube做代码静态检查。
- 查詢目前 Windows 電腦曾經連線過的 WiFi 密碼,
netsh wlan show profile key=clear
,这么直白。
每周技术文章 No.245 2019.12.09-22
前端技术,界面、交互
- CSS repeat()函数详细介绍,助力 Grid 的用法。
- CSS flex 属性深入理解。
- ECharts 技术发展简史。
后端技术,操作系统、虚拟化、存储、网络、桌面
- 容器诊断工具集合,包括netshoot、docker-debug、kubectl-debug。
- [转][译] Linux 网络栈监控和调优:接收数据(2016),发送数据(2017)。
- Evaluating BBRv2 on the Dropbox Edge Network,实测 BBRv2 的改进:与其他协议流量共存、丢包重传偏高、Wifi 下吞吐偏低、降低 CPU 占用等。
- 文件系统是否适合做分布式文件系统的后端,“介绍了 Ceph 为何在使用了十多年的本地文件系统之后,又开发了基于裸设备的存储后端 BlueStore,并将默认存储后端切到了基于裸设备 BlueStore”;传统文件系统对新特性硬件的支持缓慢,比如 SMR HDD、ZNS SSD;存储层对原生事务、COW、数据日志的“依赖”。BlueStore 实现了直接使用物理盘,为存放元数据的 RocksDB 实现了一层不完整的 FS 封装;其他空间就都用来存放数据了。
- Windows、WSL 与 Linux 的性能对比,这个有意思 WSL/WSL2 某些性能比 Windows 要好;测试配置下,Ubuntu 总体比 Windows 快 27%。另见原文。
硬件设备,ARM、终端、移动、智能设备、安全
- USB4 Switch for USB4 Product Development,20Gbps、100W,我就看看。
团队建设
- Git 内部原理揭秘,图不错,有助于更好去看官方文档。
- 人类简史读书笔记。
每周技术文章 No.244 2019.11.25-12.08
前端技术,界面、交互
- CSS minmax()函数简介,配合 grid 的弹性布局。
- Uncommon Use Cases For Pseudo Elements,CSS 非主流用法。
- 从 0 开始入门 Chrome Ext 安全(二) – 安全的 Chrome Ext;另见带来更多安全和便捷的 10 大浏览器扩展,有几个值得开发人员用用,呵呵。
- Web 播放 AV1 概述,编码质量提升明显啊。
后端技术,操作系统、虚拟化、存储、网络、桌面
- Kafka 入门一篇文章就够了,整理的不错。
- Kubernetes Deployment 故障排除图解指南。
- k3s 高可用部署实践及其原理,轻量高可用配置存储用的是dqlite,“分布式”的 sqlite。
- 妙到颠毫: bigcache 优化技巧,fnv64a 在栈上进行运算的 Hash 算法;“如果我们的对象不包含指针,虽然也是分配在堆上,但是垃圾回收可以无视它们”。
- 标准错误 stderr 的诞生(2013),“照相排版过程为标准错误概念的诞生提供了基础”,要么输出正确内容,要么输出错误信息;另见原文 The Birth of Standard Error。
硬件设备,ARM、终端、移动、智能设备、安全
- ROCK Pi SATA HAT Targets ROCK Pi 4 & Raspberry Pi 4 NAS,NAS 扩展,4 盘位走双 USB3.0 能到 400MB/s 顺序读写,5 盘位走 PCIe 能到 803 MB/s,挺唬人。
市场、产品、项目
- 《设计常识》写好了,有兴趣可以看看,重要的还是多实践多思考。
- 业界良心!这个叫「全历史」的网站惊艳到我了,哈哈,关系图谱确实很有趣,去看看。