运维烂笔头

一个 SA 老兵的工作日志

缘起

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)的数据记录导致的。

What is HSTS

HTTP Strict Transport Security (HSTS) is a web security policy mechanism which helps to protect websites against protocol downgrade attacks and cookie hijacking. It allows web servers to declare that web browsers (or other complying user agents) should only interact with it using secure HTTPS connections,[1] and never via the insecure HTTP protocol. HSTS is an IETF standards track protocol and is specified in RFC 6797.

The HSTS Policy is communicated by the server to the user agent via an HTTPS response header field named “Strict-Transport-Security”.[2] HSTS Policy specifies a period of time during which the user agent should only access the server in a secure fashion.[3]

以上来自于维基百科

大概意思是说 HSTS 是一个 web 安全策略装置,用于保护 web 站点免受协议降级攻击和 cookie 劫持。

阅读全文 »

缘起

我厂办公室测试小机房有一些运算资源,但是其网络是不能直接上公网的,而是通过一个内部代理(内部域名是:proxy.xxxdev.com,端口 3128)来上公网的。

但是现在部署环境,多半需要在命令行下折腾,而且还多半需要不停的从公网下东西(安装),所以,怎样在命令行下(shell 里)使用代理来上公网就成了一个绕不开的话题……

阅读全文 »

缘起

起因自然是我厂某台 CentOS 7.x 的机器需要重置密码,然后我就想按老套路:重启进单用户,再重设密码。没想到 CentOS 7.x 的系统跟 CentOS 6.x 来说有了很大的变化,于是我又只好翻了下文档,重新学习了一下。以下是具体操作步骤:

阅读全文 »

缘起

这个项目的目的主要是为了解决 Linux
服务器在本地解析域名中碰到的几个问题:

  1. nameserver 中一部分有故障(包含宕机了)的问题
  2. nameserver 中一部分性能有问题的问题
  3. 有 HA,但有时候服务切换没有期望得那样准确、迅速

主要为了解决以上三个问题,于是有了内网域名解析优化的需求。

阅读全文 »

缘起

最近上面在开会嘛,职能部门也许是要展示下“肌肉”:“不是我搞不了你,我只是平时懒得鸟你。”我猜大概就是这么个原因吧,结果就是:最近这段时间大家的“科学上网”纷纷中招,不好使了。我司原来用的 SS 改良的版本,中招了,至于怎么解决的,不在本篇讨论的范围之内。

我主要说下家里的情况,家里原来也是 SS 方案,这段时间也不行了,通常是早上不通了,改下端口,然后到晚上又不行了,然后又改端口,搞了两次才是反应过来是被盯上了。心中大呼侥幸!这要是不封端口直接封 IP 我可咋整呀?!就冲这点来讲不得不说职能部门真是良心单位哈,值得点个赞!

现有资源

  • 米国 VPS 一台(Ubuntu 16.04)
  • 家里路由器一台(OpenWrt 14.07,bcrm63xx 架构)

以前也是这情况,不过以前跑的是 SS,据说 SSR 比 SS 更不容易被 ban,所以这次我的方案是用 SSR 替换掉原来的 SS。

阅读全文 »

方法一

1
curl qrenco.de/http:\/\/m.theyan.gs

系统输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
█████████████████████████████████
█████████████████████████████████
████ ▄▄▄▄▄ █ ▀▀▄ ██▀█ ▄▄▄▄▄ ████
████ █ █ ███ ▄▄▄████ █ █ ████
████ █▄▄▄█ █ ▄▄ █▀▄███ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ █ ▀ █▄▀ █▄▄▄▄▄▄▄████
████ ▄ ██▄▄▀ ██ ▄▀▄ ▄▀█ ████
████▄▀█▀▀ ▄▄▄▀█▄█▀█ █▄ ▀ ▄█▄████
████▄▄▀▀▀▀▄ █ █▄ ▄█▀ █ ▄███▀ ████
████▄▄ ██▄▀ ▀ ▀ ▄ ▄█▄█▀ ▄▄█▄████
████▄▄▄▄█▄▄█ ▄▄██ ▄ ▄▄▄ █▀▄▀████
████ ▄▄▄▄▄ █▀▄▀▄█▀█▀ █▄█ ▄█▀ ████
████ █ █ ██▀ ▄ ▄█ ▄ ▄▄ ▀ ▄████
████ █▄▄▄█ █ █▀ ▄ ▀ █▀ ██▄▄████
████▄▄▄▄▄▄▄█▄████▄▄█▄█▄██▄██▄████
█████████████████████████████████
█████████████████████████████████

方法二

1
echo "http://m.theyan.gs" | curl -F-=\<- qrenco.de

得到的系统输出是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
█████████████████████████████████
█████████████████████████████████
████ ▄▄▄▄▄ █ ▄▄ █ ██▀█ ▄▄▄▄▄ ████
████ █ █ ██▄█▀▀▄████ █ █ ████
████ █▄▄▄█ █ ▀▀▄ ▀▄███ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ ▀▄█▄█▄▀ █▄▄▄▄▄▄▄████
████▄▄ █▀ ▄▀ ▄█▄ ▄▀▄ ▄▀█ ████
████▄▄ ██▄▄ ▄ ▀ █▄ █▄ ▀ ▄█▄████
█████▀▄▄▀█▄▀▄▄ ██ ▄▀ █ ▄███▀ ████
████▄▄ █ ▄▀ ▄▄█▀█▄█▄█▀ ▄▄█▄████
████▄▄▄▄██▄▄▀▄ ▄ ▄█▄ ▄▄▄ █▀▄▀████
████ ▄▄▄▄▄ █▀▄▄▀ ▄ ▀ █▄█ ▄██▄████
████ █ █ ██ ▄██ ▄ ▄▄ ▀▀▄████
████ █▄▄▄█ █ ▀▀▄█▀█ ▀ █▀ ██▄▄████
████▄▄▄▄▄▄▄█▄▄█▄▄▄██▄█▄██▄██▄████
█████████████████████████████████
█████████████████████████████████

检测结果

用二维码识别软件检测上面这两个二维码,发现都是:“http://m.theyan.gs”

0%