Pensieve: 2008

2020-08-20 22:29

所观所读所听

重看了一代宗师, 墨镜拍的电影喜欢卖深沉, 具体来说, 除了重新组装文字让人印象深刻外, 还喜欢擦掉辅助线后直接说结论, 让人云里雾里而又似是而非. 怎么说呢, 我还是喜欢平实而表述准确的文字和图像. 另外还看了Hello world, 这个剧本的出发点是一定要在最后半分钟逆转剧情, 回头再来看全剧才能理解各种铺垫. 看着自己写的这些, 觉得这年头大家都不肯好好说话吗?

Harry Potter 4进度缓慢, 主要原因除了手上在玩的游戏外, 重读雪中悍刀行也花了不少的时间.

所玩

拿起Switch上的Final Fantasy 8玩了玩, 还没拿到Ifrit就放下了, 太累.

手机上入坑Kittens Game, 作为一个有点编程能力的人, 我也愿意写一个类似这样的游戏. 设想是直接模拟生物进化史, 在一个气候变化剧烈的星球上不断演化. Kittens里面交易的元素比较bug, 比如蓝图这种前中期的紧俏物品在交易随机获得, 而且几率不低, 实在不太对. 另外, 这类游戏里面的重置的元素我也不太欣赏, 有强行拉长游戏的嫌疑, 所以我的想法是随着气候的变化, 文明会完全被抹去, 只剩下一些遗迹得到保存, 如果下一个文明发展到了一个相近的等级, 则可以利用这些遗迹来实现文明之间的传承.

另外玩了下Big Sur和Hammerspoon以及lua, 前文有详述, 不赘.

ECR误删镜像恢复

照例先讲题外话: 组里来了一位负责安全的同事, 上手后就开了一群ticket, 推着大家改这改那. 我手上的坑少, 不过之前提过的ECR管理方案里面有个小坑: 虽然ECR里面有API设置image-scanning-configuration, 但是Cloudformation一直没有支持. 我一直在等着这个特性, 心想这应该算是小feature, 也容易测试, 应该比较快就完成了, 所以一直也没高兴去折腾一个Custom resource来调用这个API. 不过现在有人在背后推, 也就写了一个Custom resource来调用这个API. 折腾完了去AWS Console里面看成果, 发现有两个人肉创建的Repository没有这样设, 于是手贱删除了这两个repo, 删除完了脑子清醒过来, 有一个是历史遗留问题, 现在生产环境仍在使用. 得了, 修吧.

首先自然是按原有名字恢复Repository了, 手工创建完成后修改权限, 允许某个账户的所有人有ecr所有权限, 策略文件如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:root"
        ]
      },
      "Action": [
        "ecr:*"
      ]
    }
  ]
}

这样, 123456789012这个账户里的任何人/服务都具有ecr的所有权限. 然后, 进到那个账户里面去, 找了一台有那个镜像的机器(还好我们在用EC2跑ECS, 不是Fargate或EKS), SSM登陆进机器后登陆registry:

$(aws ecr get-login --no-include-email --region ap-southeast-2 --registry-ids 567890123456)

然后尝试push, 大概率你会发现没权限, 因为你的instance role里面没有ecr权限. ECS在执行时, agent使用的是execution role和ECR通讯, 不依赖instance role. 所以, 你可以:

后面一个操作显然简单很多, 所以我用了这个办法. 记得不错的话, 改完这个权限后要小等一段时间, 并且要重新登陆registry来刷一遍权限. 另外要记得改ECR里面的策略, 回收写权限.

回头来说, 在我发完PR加了这个Custom Resource后的两三天, Cloudformation就支持直接在模版里定义这个属性了, 掀桌.

基于photoprism的家庭相册方案

这个月月头折腾了一下自己的树莓派, 换用Ubuntu, 而且安装Photoprism搞了一个家庭相册.

Photoprism这个项目我跟进好久了, 看演示版觉得功能不错, 而且自己host比较放心. 不过之前没有arm版, 自己尝试在armv7上编译tensorflow, 折腾许久也没有好的结果, 所以后面就放弃了, 即使看到Ubuntu发新闻说原生支持armv8后也没动心再去尝试. 实在是被tensorflow的编译工具链统治了. 后来有人克服了这个问题, 发了一个基于armv8的photoprism, 于是就动心了. 备份树莓派后重装成Ubuntu, 用之前的这个Ansible项目来初始化, 一切都比较顺利. 有了Docker, 跑Photoprism也很顺利.

提醒下, 一定在做好备份的情况下操作图片, 现在存储便宜, 丢了照片里的回忆就不划算了. 我自己树莓派上挂了两块外置, 一块上面跑照片, 有一个cron定时将照片目录同步到另一块盘上去.

开源贡献

这个月还做了几个微不足道的开源贡献.

一个是Buildkite的插件, 可以用来判断一个pipeline是否符合语法. 地址在这儿. 我们内部的使用场景是一些repo有多个pipeline, 例如有一个主pipeline, 会调用本项目另一个pipeline来部署, 而且会调用另一个pipeline来发布. 最后这个pipeline我们只有发布的时候会用到, 平常不会去碰. 但是如果里面有简单语法/逻辑错误, 则可能会导致发布失败. 所以每次用这个插件扫一遍, 比较省心.

另一个是之前提过的将aws-extend-switch-role插件移植到了Safari. 至少我自己用起来还是挺爽的. 为啥不用xx浏览器? 我不太信任Chromium项目.

最后一个是给Photoprism贡献了中文翻译, 主要原因实际是方便家里长辈使用.