Centos6编译安装Pcap_DNSProxy——DNS防污染利器

一.缘起

最近有朋友提起自建dns的方案,我个人用的是dnsmasq+dnscrypt-proxy,他吐槽说我这个太麻烦,用pcap_dnsproxy一个就够了,然而……这玩意我上手之后发现编译起来简直是神坑,特别是对于centos6来说,感人肺腑= =……不过问题的出现就是为了解决吗,作者在说明里把依赖全列出来了,所以我折腾了下搞定了,在此记录一下,以方便其它有需要的人。

二.解铃

安装方法:
安装过程比较漫长而且操作比较复杂,请给予一定的耐心按照说明操作!

1.准备程序编译环境:编译前需要使用包管理工具安装,或者需要自行编译和安装依赖库
* 依赖工具/库列表:
* GCC/g++ 可访问 https://gcc.gnu.org 获取
* GCC 最低版本要求为 4.9 从此版本开始 GCC 完整支持 C++ 11 标准,4.9 之前的版本对 C++ 11 标准的实现有问题
* GCC 当前版本可使用 gcc --version 查看,使用旧版本 GCC 强行编译可能会出现无法预料的问题!
* Bison 可访问 https://www.gnu.org/software/bison 获取
* M4 可访问 https://www.gnu.org/software/m4 获取
* Flex 可访问 http://flex.sourceforge.net 获取
* CMake 可访问 https://cmake.org 获取
* LibPcap 可访问 http://www.tcpdump.org/#latest-release 获取
* 获得 root 权限后使用 ./configure -> make -> make install 即可
* 部分 Linux 发行版可能还需要 LibPcap-Dev 工具的支持
* Libsodium 可访问 https://github.com/jedisct1/libsodium 获取
* 编译时如果剥离 Libsodium 的依赖则可跳过编译和安装下表的依赖库和工具,具体参见下文的介绍,不建议使用
* Libsodium 的编译和安装依赖 Automake/Autoconf 套装工具:
* aclocal
* autoscan
* autoconf 可访问 https://www.gnu.org/software/autoconf 获取
* autoheader
* automake 可访问 https://www.gnu.org/software/automake 获取
* libtool 可访问 https://www.gnu.org/software/libtool 获取
* 获得 root 权限后进入目录,运行 ./autogen.sh -> ./configure -> make -> make install 即可
* 部分 Linux 发行版可能还需要 Libsodium-Dev 工具的支持
* 部分 Linux 发行版可能还需要运行 ldconfig 刷新系统的库缓存

2.编译 Pcap_DNSProxy 程序并配置程序属性
* 切勿更改脚本的换行格式 (UNIX/LF)
* 使用终端进入 Source/Scripts 目录,使用 chmod 755 CMake_Build.sh 使脚本获得执行权限
* 使用 ./CMake_Build.sh 执行编译程序
* 添加参数 --enable-static 即 ./CMake_Build.sh --enable-static 可启用静态编译
* 脚本所进行的操作:
* CMake 将编译并在 Release 目录生成 Pcap_DNSProxy 程序
* 设置 Pcap_DNSProxy 程序以及 PcapDNSProxyService 和 Pcap_DNSProxy.service 服务控制脚本的基本读写可执行权限
* 设置 Linux_(Un)Install.Systemd.sh 以及 Linux_(Un)Install.SysV.sh 服务控制安装脚本的基本读写可执行权限
* 从 ExampleConfig 复制默认配置文件到 Release 目录
* 执行时使用 ./CMake_Build.sh --disable-libsodium 可剥离 Libsodium 的依赖,不建议使用
* 剥离后编译时将不需要 Libsodium 库的支持
* 剥离后程序将完全失去支持 DNSCurve/DNSCrypt 协议的功能,且运行时将不会产生任何错误提示,慎用!

3.配置系统守护进程服务
* 由于不同的 Linux 发行版对系统服务和守护进程的处理方式不同,本步仅供参考
* 附带的 Linux_Install.Systemd.sh 脚本适用于默认使用 Systemd Init 的系统
* Linux Debian 8.x 官方发行版以及更新版本系统环境,经测试可直接使用
* 附带的 Linux_Install.SysV.sh 脚本适用于默认使用 System V Init 的系统
* Linux Debian 6.x - 7.x 官方发行版系统环境,经测试可直接使用
* 更多详情可参见下文其它 Linux 发行版服务的说明,以及所使用 Linux 发行版的官方说明
* 使用 Systemd Init 时:
* 进入 Release 目录并编辑 Pcap_DNSProxy.service 文件,编辑完成后保存:
* WorkingDirectory= 项为程序所在目录的绝对路径
* ExecStart= 项为程序所在目录的绝对路径,并在最后加上程序的名称
* 在 root 权限下使用 ./Linux_Install.Systemd.sh 执行服务安装脚本,脚本所进行的操作:
* 将 Pcap_DNSProxy.service 服务控制脚本的所有者更改为 root
* 安装服务控制脚本到 /etc/systemd/system 目录中
* 尝试启动 Pcap_DNSProxy 服务,并显示执行操作后服务的状态
* 以后每次系统启动都将自动启动服务
* 更多 Systemd 服务控制的方法,参见各 Linux 发行版官方文档的说明
* 使用 System V Init 时:
* 进入 Release 目录并编辑 PcapDNSProxyService 文件,编辑完成后保存:
* NAME 项为程序的名称
* PATH 项为程序的绝对路径
* 在 root 权限下使用 ./Linux_Install.SysV.sh 执行服务安装脚本,脚本所进行的操作:
* 将 PcapDNSProxyService 服务控制脚本的所有者更改为 root
* 安装服务控制脚本到 /etc/init.d 目录中
* 尝试启动 PcapDNSProxyService 服务,并显示执行操作后服务的状态
* 以后每次系统启动都将自动运行脚本启动服务
* 可直接输入 sh PcapDNSProxyService 不带参数查询用法
* start - 启动服务
* stop - 停止服务
* force-reload/restart - 重启服务
* status - 服务状态,如果 PID 为空则服务未启动

阅读全文→

Centos安装Saltstack——将者,一人可御万兵

一.引子

最近搞集群搞得真是热火朝天,顺带研究了好多东西,Saltstack我之前也接触过,是某大佬给我安利的,可以方便的拿来管理手上的一票机器,不必苦逼的一台台ssh上去,之前用的也是蛮好的,可惜我的部署了master端的机器商家不做了(大学森带着小姨子跑路啦,滑稽),然后也一直懒得切,所以就丢那了,现在重拾起来折腾下。Saltstack的介绍网上有不少,我找了一段:

salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System。

网上一般认为它是func的强化版本+ puppet的精简版,不过虽然说是精简版依旧是很强大的,起码对于我来说那是完全足够了。

二.搞起

看过网上的一部分安装教程,有些说是要启用epel-testing源才能安装,不过我测试是不需要的,可能是已经不用测试了吧……毕竟那个版本是2015年5月的了,到现在也该是stable version了,不过嘛,还是得安装下epel源

安装完那我们就需要开始简单的配置一下了 阅读全文→

Centos6安装devtoolset(高版本gcc)——工欲善其事,必先利其器

一.缘由

Centos6这老旧的软件源真是每次都让我碰到问题……然而我依旧爱它爱的那样深沉(滑稽),好吧,主要是我懒得换_(:з」∠)_,毕竟人是恋旧的(大滑稽),额,我吹不下去了。事实就是Aria2要求gcc 4.8以上的版本才能编译,然而Centos6源里的gcc版本才4.4,所以升级gcc就成了头号问题。

二.走起

问题发现了那就要解决,常规的方法都是编译,然而……GCC这玩意编译起来真的是要命啊,高配机器还好,低配的那简直了,我选择死亡,所以我直接扭头就跑,然后发现了devtoolset,字面上可以理解为开发工具集,主要就是一大堆版本较新的编译器啥的,当然也有GCC和G++这俩,OK,那么问题就好办了,装起来

①GCC 4.7

阅读全文→

Centos6编译安装最新Aria2 1.27.1——带你临近网速极限

一.引

Centos6是我最常用的系统,稳定而且上手之后棒棒的,然而有个问题一直比较尴尬,就是很多软件在Centos6的源里版本落后太多,甚至已经不更新了,这真的尴尬啊,aria2就是这样……作为一款在Rpmforge(Repoforge)源中已经停更的软件(Rpmforge本身都已经放弃维护了),它的版本永远停留在了1.16.4,然而截止目前来说,aria2最新版本已经到了1.27.1,最蛋疼的是这玩意的1.18版本是个坎,很多的配置项都要求在1.18版本以上,特别是rpc-secret这个安全性更新,所以,没办法了,只能上编译大法了。

二.续

PS.最近发现确实是不少人来看这篇文章,我觉得有必要先说明一点,这个是我当初没找到有人发布静态编译的时候手动编译的过程,说实在话比较烦人,如果有想上手即用的建议参考我这篇文章中的静态编译版本,只需要解压然后加个可执行权限就能用——>传送门

首先是一堆依赖包,是的……作为一个强迫症我努力把依赖尽可能满足,所以多了一大堆包_(:з」∠)_,你们可以随意哟

其中最后的gperftools和jemalloc二选一,第一个是TCMalloc要求,第二个是JEMalloc要求,其中libuv-devel、cppunit-devel都是可选的,要不要随意~\(≧▽≦)/~啦啦啦

然后就是编译啦,最新版本目前是1.27.1,还真是快呢,前两个星期我编译的时候还是1.26.1

这个是半静态编译(其实想完全静态编译的,可惜那堆依赖纯静态的太难找了,只能凑合了),不需要的可以去掉--enable-static=yes --enable-shared=no以及最后的 ARIA2_STATIC=yes,当然如果你的系统ca-bundle不知道在哪也可以去掉那个选项,至于jemalloc的话可以换成tcmalloc,看你自己的喜好了,libuv也可以去掉哟,所以其实啥参数都可以不带呢_(:з」∠)_

PS.编译Aria2需要gcc >= 4.8.3 或者 clang >= 3.4,gcc在centos6中版本默认只有4.4,如需安装高版本得用其它方法,详情请参见我接下来的文章

另外还可能出现一个报错如下

sp20160919_223612

请运行如下命令

然后应该就能正常编译了

阅读全文→

配置SSH免密登陆——大门只向你敞开

一.引子

最近在忙大创项目,在折腾hadoop的过程中免不了需要创建一个新用户并配置ssh免密登陆,然而这个看起来简单得不能再简单的地方我也栽了个跟头,真的尴尬,不过还是记下来吧,希望其他碰到问题的人能顺利解决。

二.情况复现

那么到底发生了啥,请容我娓娓道来,因为我要把用户创建和配置全部写到脚本里,所以我期望做到的是尽可能少的交互操作,更接近无人值守式配置。

①.需要给新创建的用户hadoop赋予root权限。这个如果是交互式操作那很方便了,直接visudo然后按照root的权限格式添加hadoop就行,但是非交互式就需要直接操作/etc/sudoers文件了,我选择的是使用sed命令插入,虽然echo貌似也行,但不能准确插入到指定行,所以作为半个强迫症我果断放弃,那么问题来了,怎么获取目标行号?这就需要一套组合拳

这条命令便能输出"root    ALL=(ALL)       ALL"这行的行号,我们的目标便是在它的下一行插入"hadoop    ALL=(ALL)       ALL",所以我们需要

这里我一开始没加"a"(ahadoop前那个),然后试了半天各种报错……这个是after的意思,即为在指定行数之后,还有个"i"是之前。把这两条命令合并便是如下

OK,这个问题便解决了。 阅读全文→