运维烂笔头

一个 SA 老兵的工作日志

缘起

办公室某台跑 wireguard 打洞的机器挂了,重启之后发现 wireguard 设备起不来,

1
2
wg-quick up wg_ofc;
# 配置文件为:/etc/wireguard/wg_ofc.conf

会报错:

Cannot find device “wg_ofc”

阅读全文 »

缘起

今天下午面了一家特别想去的公司,结果聊很多,但是……折了,不要问我为什么知道的,面试完本来说别的同事(一般会是 HR)再聊一下但结果是前台来直接送走这不是凉了是什么?

主要原因我想是:

  • 人家本来要求就高
  • 我有几个技术点答的不好

我想,折了就折了吧,我只能看能不能变废为宝,从中学到点什么,吸取什么教训什么的,于是就有了本篇面试总结。

阅读全文 »

缘起

最近要登某一台 ec2,结果其私钥丢了,于是根据文档,将这台 ec2 的机器 stop 掉,然后将根区先 detach 掉,然后再将其 attach 到同 subnet 的另外一台 ec2 上。

按照正常的流程,在另外一台好的 ec2 的机器上将刚 attach 过来的分区 mount 上以后再修改好其 authorized_keys 文件即可完成任务的。

阅读全文 »

Eliza Sorensen 的访谈

NOTE:

你是谁,你做什么工作

我是 Eliza Sorensen 或其他任何地方的 @zemmiph0bia。我是澳大利亚墨尔本市的一名基础设施和安全工程师,也是创建了性工作友好社交空间 Switter.at 和现代广告平台 Tryst.linkAssembly 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 保留我的文档。

您的理想设置是什么

我对当前设置非常满意,但是我不介意回到带有樱桃蓝色轴的键盘……但是我不想赶走我的伴侣。

缘起

以前有个贪便宜(一年 5 刀)而入手但目前在吃灰中的小鸡,当然是 OpenVZ,网络条件很差,用起来很鸡肋,后来看到 Google 的 BBR 也有能用在 OpenVZ 的案例,于是也想尝试下,看是否能将其起死回生。

阅读全文 »

缘起

自然是我司每周都要完成的周报。

背景

我司重度依赖“不存在网站”:Facebook 开源出来的项目:Phabricator,我们的每项工作也来自于其中的 Maniphest(不知道是什么语言,不像英语,反正应该就是 task 的意思),每周的工作周报里提到的事情如果有 task 的(一般都有),都还要附上其 task id。

同时,Phabricator 目前的运营公司: Phacility 同时也放出了一套 php 的类似于 SDK 的东西:libphutil,所以我就开始尝试着用 php 来撸一个自动生成、发布周报的东西。

about Pha_WR_SRE

Pha_WR_SRE
不许说项目名称起的很雷人。:(

这个东西怎么做的就不说了,这里主要说下大概实现了哪些功能。

输出的信息

输出的信息分三种:“completed”、”ongoing” 和 “other”,分别对应着“已完成”、“未完成”和“其他”。

输出的目标

已实现的是四种:

  1. Console
  2. OneNote
  3. Evernote
  4. 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
2
3
4
# load .plist file if U have not change it's name
launchctl load gs.theyan.phawrsre.plist;
# start job manually
launchctl launchctl start GenerateReport.job;

缘起

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 里都有提到。

写在最后

如果我辛苦折腾的这个东西真能帮上你的忙,请帮我给项目点赞吧,谢谢!

WHY

这里的为什么不是说为什么要装 zabbix-proxy 的问题,而是说为什么要写这篇文章。
为什么要写这篇文章呢?答案很简单,官方文档太碎了,东一榔头西一棒子,一个简单实际直接的问题:怎样在 ubuntu 上安装部署 zabbix-proxy,翻官方文档得翻四五篇文档,而且这四五篇文档中还有很多干扰信息,需要仔细分辨,否则会对部署造成负面影响。
所以,就有了这篇“流水账”。

HOWTO

INSTALLATION

1
2
3
4
5
6
7
8
9
# 安装 zabbix 官方的 ubuntu 16.04(版本号 xenial) 的软件仓
wget \
https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb;
dpkg -i zabbix-release_3.4-1+xenial_all.deb;
apt-get update;
# 安装 zabbix-proxy 所需之 mysql 数据库服务器软件
# 注意这一步会让设置 mysql 服务器的 root 密码(不是系统密码!)
# 这个要记住,在执行下一步操作的时候要输入的
apt-get install mysql-server-5.7;
1
2
3
# 用 root 身份连入 mysql 数据库系统并进入交互式模式
# 注意:这里需要输入上一步设置的 root 的密码
mysql -uroot -p
1
2
3
4
5
6
7
8
# 创建 zabbix-proxy 系统所用数据库:zabbix
create database zabbix character set utf8 collate utf8_bin;
# 创建 zabbix-proxy 应用所用数据库账号:zabbix 并其密码以及响应权限
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# 使权限及时生效
flush privileges;
# 退出 mysql 交互式环境
quit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装一些 zabbix-proxy 系统可能会需要
# 但又未在 zabbix-proxy-mysql 软件包里
# 明确指定依赖的软件包,
# 这里对于有用 snmp 监控网络设备的场景来讲非常重要
# 因为缺省是不会安装 snmp-mibs-downloader 之类
# 必须的软件包的。
# 注意,同时也安装上了 zabbix-agent,这个是无所谓的,
# 毕竟,所有的服务器都要装 zabbix-agent 不是吗
apt-get install \
libsnmp-base \
snmp-mibs-downloader \
snmp \
libsnmp30 \
zabbix-proxy-mysql \
zabbix-agent;
# 创建 zabbix-proxy 需要的数据库结构及一些初始数据
zcat \
/usr/share/doc/zabbix-proxy-mysql/schema.sql.gz \
| mysql -uzabbix -p zabbix;

CONFIGURATION

1
2
# 修改 zabbix proxy 的设置文件
vim /etc/zabbix/zabbix_proxy.conf
1
2
3
4
# 修改 zabbix agent 的配置文件
# 本来这个不是本文讨论的重点
# 只是部署 zabbix proxy 时都会部署 zabbix agent
vim /etc/zabbix/zabbix_agentd.conf
1
2
3
4
# 最后,将几个服务设为自启动
systemctl enable mysql.service;
systemctl enable zabbix-proxy.service;
systemctl enable zabbix-agent.service;

起因

服务器上用 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)

  1. apt 的配置文件里没有关于 i386 的设置
  2. source 里也没有关于 i386 的设置

原因简介

Ubuntuamd64 系统中,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 来维护域名,某天否然发现有纪录在 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)的数据记录导致的。

0%