xx公司面试总结(查漏补缺)
EC2 上挂载别的机器的根分区时"duplicate uuid" 问题
Eliza Sorensen 的访谈
Eliza Sorensen 的访谈
NOTE:
- 原文来自于 Eliza Sorensen
- 我 HOST 的版本在 Eliza Sorensen
你是谁,你做什么工作
我是 Eliza Sorensen 或其他任何地方的 @zemmiph0bia。我是澳大利亚墨尔本市的一名基础设施和安全工程师,也是创建了性工作友好社交空间 Switter.at 和现代广告平台 Tryst.link 的 Assembly Four 的共同创始人。
您使用什么硬件
看来这些天我一直在移动,所以我严重依赖我的 X1 Carbon, Google Pixel 3 XL, Audio Technica ATH-AR5BT headphones,powerpack(很大的背包?),笔记本和 Lamy(凌美,一种笔)Safari。
当我在办公桌前时,可以使用两台 Dell 27 英寸显示器,一个 Ducky One 机械键盘(樱桃棕色轴)和一个Logitech G700 鼠标。
您用什么软件
我只想在台式机上使用 Linux,我的操作系统是Ubuntu,我的 shell 是 zsh,我用 ProtonVPN 连接,我用 Firefox (上网)冲浪,我用 1Password 保存密码,我用 Spotify 听音乐,我用 Toggl 管理时间、用 Clubhouse 管理任务,用 vim 写作,用 Sublime Text 3 写代码,使用 Zeal 保留我的文档。
您的理想设置是什么
我对当前设置非常满意,但是我不介意回到带有樱桃蓝色轴的键盘……但是我不想赶走我的伴侣。
How to enable BBR in OpenVZ
缘起
以前有个贪便宜(一年 5 刀)而入手但目前在吃灰中的小鸡,当然是 OpenVZ,网络条件很差,用起来很鸡肋,后来看到 Google 的 BBR 也有能用在 OpenVZ 的案例,于是也想尝试下,看是否能将其起死回生。
一个从 Phabricator 中抓出任务生成周报的东西
缘起
自然是我司每周都要完成的周报。
背景
我司重度依赖“不存在网站”:Facebook 开源出来的项目:Phabricator,我们的每项工作也来自于其中的 Maniphest(不知道是什么语言,不像英语,反正应该就是 task 的意思),每周的工作周报里提到的事情如果有 task 的(一般都有),都还要附上其 task id。
同时,Phabricator 目前的运营公司: Phacility 同时也放出了一套 php 的类似于 SDK 的东西:libphutil,所以我就开始尝试着用 php 来撸一个自动生成、发布周报的东西。
about Pha_WR_SRE
Pha_WR_SRE,
不许说项目名称起的很雷人。:(
这个东西怎么做的就不说了,这里主要说下大概实现了哪些功能。
输出的信息
输出的信息分三种:“completed”、”ongoing” 和 “other”,分别对应着“已完成”、“未完成”和“其他”。
输出的目标
已实现的是四种:
- Console
- OneNote
- Evernote
- Phabircator’s Phame
第一种就不用说了,如果在控制台运行,运行结果会被直接输出到控制台的;
第二种也简单,OneNote 支持用 Email 的方式发布 Note,不过需要先在 OneNote 里设置下发邮件的地址白名单(具体见 README 文件);
第三种跟 OneNote 差不多,不过 Evernote 需要一定级别的帐号才支持这种功能,而且他的目标 email 地址是隐藏的,需要自己去找,而且不建议让别人知道;
第四种是我自己想的,反正 Phabricator 也支持 blog 功能(Phame),不过这个需要先在 Phabricator 中新建一个 blog 获得其的 phid 并配置在 config.ini 中;
macOS
对于用 macOS 的用户,这里还有个特殊的新功能:可以直接设置定时运行这个任务。具体方法就是把项目里那个 .plist.example 文件稍稍修改下(也可以不修改),改名去掉“.example”,放到 ~/Library/LaunchAgents 目录下,然后可以用命令:
1 | # load .plist file if U have not change it's name |
分享一些自己DIY的Tasker的profile
缘起
about Tasker
早先通过 Google Opinion Rewards 做调查挣了小几美刀,于是就购买了 Google Play Store 下的第一个收费软件:Tasker。但后来由于种种原因,Tasker 一直没有真正用起来(我最看重的几个功能都实现的不好)。
about IFTTT
一直在用 IFTTT 的一个功能:每日抓取 NASA 的图回来做 Android 手机的 Wallpaper,但最近同时用两个 Android 手机,不希望两个手机同时一样的 Wallpaper,但这个需求如果用 IFTTT 来做只能每台 Android 手机用单独的账号来实现,这个实现显然太丑陋了。
最终方案
Tasker 官方其实有一个放出来的 profile,是来抓 reddit 的图的,但那是几年前的东西了,现在几乎没法用,但作为例子,这个 profile 处理这种问题的思路是可以借鉴的。于是我就修改了下这个 profile,实现了抓 reddit.com/r/wallpaper 和 reddit.com/r/pic 以及 NASA iotd(Image of the Day) 的功能。
about tasker_profile
上面提到的这个 profile,我放到了 github 下面了,这里远期还会放一些 Tasker 可用的、实现了一些实用好玩儿功能的 profile,但是暂时,就这么一个 profile,叫“Wallpaper”,意思是更系统 Wallpaper 相关的一个 profile。使用起来也不难,README.md 里都有提到。
写在最后
如果我辛苦折腾的这个东西真能帮上你的忙,请帮我给项目点赞吧,谢谢!
在Ubuntu16.04上部署Zabbix-proxy3.4的流水账
WHY
这里的为什么不是说为什么要装 zabbix-proxy 的问题,而是说为什么要写这篇文章。
为什么要写这篇文章呢?答案很简单,官方文档太碎了,东一榔头西一棒子,一个简单实际直接的问题:怎样在 ubuntu 上安装部署 zabbix-proxy,翻官方文档得翻四五篇文档,而且这四五篇文档中还有很多干扰信息,需要仔细分辨,否则会对部署造成负面影响。
所以,就有了这篇“流水账”。
HOWTO
INSTALLATION
1 | # 安装 zabbix 官方的 ubuntu 16.04(版本号 xenial) 的软件仓 |
1 | # 用 root 身份连入 mysql 数据库系统并进入交互式模式 |
1 | # 创建 zabbix-proxy 系统所用数据库:zabbix |
1 | # 安装一些 zabbix-proxy 系统可能会需要 |
CONFIGURATION
1 | # 修改 zabbix proxy 的设置文件 |
1 | # 修改 zabbix agent 的配置文件 |
1 | # 最后,将几个服务设为自启动 |
从apt-get出抓取binary-i386/Packages.gz失败的错误说开去
起因
服务器上用 apt-mirror 来拉取某些软件官方的 apt 仓并本地建仓,用于本地服务器的软件安装和更新,这个大概也是众多运维工程师曾经做过的事情吧。
今天我在某一台服务器上做 apt-get update 时出错了,系统报 “http://xxx.xx.xx.xx/xxxxxxxxxxxxxxxxxxx/binary-i386/Packages.gz” 抓取失败。xxx.xx.xx.xx 是我自己建的 apt 仓,用来服务于内部服务器的,xxxxxxxxxxxxxxxxxxx 正是自建仓的路径,这下面当然没有 binary-i386 目录,因为服务器都是 x86_64 架构的,应该使用的是目录 binary-amd64 才对。
环境介绍
出错的服务器的操作系统是:Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-13-generic x86_64)
- apt 的配置文件里没有关于 i386 的设置
- source 里也没有关于 i386 的设置
原因简介
Ubuntu 的 amd64 系统中,i386 是作为额外的体系结构被支持的。证据如下:
1 | dpkg --print-architecture;dpkg --print-foreign-architectures |
会输出“amd64”和”i386”。
所以 apt 缺省是希望 apt 仓也同时能提供 i386 的软件包。而我用 apt-mirror 建仓时,没有指定同步抓取 i386 的软件包,故而当服务器来抓取 i386 相关数据时会出错(因为的确没有哇)。
解决方法
知道原因了以后解决起来相对就简单了,在 apt-mirror 的配置文件 /etc/apt/mirror.list 中将想要同步抓取的软件多写一行,用 deb-i386 替换 deb,然后再跑下
1 | apt-mirror |
就会同时同步 i386 的软件包下来,这样客户端 apt-get 时就不会有错了。
进阶阅读
可以让 x86_64 系统架构的服务器仅安装 amd64 的软件吗?这样 apt-get 时也不会去抓群 i386 相关的东西了,这样的话也可以避免上面的错误。
回答是:当然可以!
首先,干掉系统现有的所有 i386 的软件包1
apt-get purge ".*:i386"
接着,将 i386 从支持的体系结构里删掉1
dpkg --remove-architecture i386
这样也可以达到目的!
一次powerdns上某个zone传输失败的问题的解决过程
缘起
我司用 PowerDNS 来维护域名,某天否然发现有纪录在 PowerDNS 已经更新了,但是客户端查询解析结果却迟迟没有更新。
排查问题
请求传输数据的一端
在用做 dns 查询用的服务器上(也是 PowerDNS),执行:
1 | pdns_control reload; |
然后在 log 里看到有错误输出:
Unable to AXFR zone ‘in-addr.arpa’ from remote ‘1.1.1.1’ (resolver): Remote nameserver closed TCP connection
(1.1.1.1 是主 DNS 服务器)
看了些文档,说有可能是数据文件太大导致传输失败,于是有直接测试了一下传输 zone:
1 | dig in-addr.arpa @1.1.1.1 AXFR; |
结果发现还是未能得到整个 zone 的数据,于是怀疑服务器端可能有问题。
在传输数据的一端
在主 DNS 服务器上(这里应该是 1.1.1.1),查看 log,发现有报错误:
Exception: All data was not consumed
TCP Connection Thread died because of STL error: All data was not consumed
仔细看了下文档,说有可能是待传输的 zone 的数据文件有问题,于是我又做了下检测:
1 | pdnsutil check-zone in-addr.arpa; |
发现一堆的数据(解析纪录)显然有问题,都备份好,然后删除之。
然后一一回头测试,这回都正常了。
问题根源
肯定是大家瞎改反向解析(in-addr.arpa)的数据记录导致的。