Salt, a new approach to infrastructure management, is easy enough to get running in minutes, scalable enough to manage tens of thousands of servers, and fast enough to communicate with those servers in seconds.


Ubuntu 平台安装 SaltStack

准备安装环境:

sudo apt-get install python-software-properties
sudo add-apt-repository -y ppa:saltstack/salt
sudo apt-get updates

安装相关组件:

sudo apt-get install salt-master # 安装 Master
sudo apt-get install salt-minion # 安装 Minion
sudo apt-get install salt-syndic # 安装 Syndic(可选)

配置 Salt Minion

cp /etc/salt/minion{,.original}
sed -i '12,12imaster: salt.example.org' /etc/salt/minion

cat >> /etc/hosts <<'EOF'

192.168.2.1 salt.example.org
EOF

配置 Salt Master 的防火墙

对于EC2上的部署来说,防火墙包括两个方面:操作系统的防火墙(iptables)和 AWS 的 Securigy Groups 设置

配置 iptables

因为 Salt Master 的默认端口是40454046,因此需要配置这两个端口的规则:

iptables -A INPUT -p tcp -m multiport --dports 4505,4506 -m state --state NEW -j ACCEPT

另,常用iptables命令行:

iptables -L -n # 查看防火墙配置
iptables-save > iptables.up.rules # 备份防火墙配置
iptables-restore < iptables.up.rules # 从文间中恢复防火墙配置
iptables -F # 关闭所有防火墙规则

配置 Securigy Groups

具体来说,就是登录 EC2 的控制台,选中你的 instance,在详细面板中,选择并修改 Securigy groups 。最终配置结果如下:

Securigy Groups Edit

详细设置,请参考官方文档 Securigy Groups

配置 Master 的 file_root

参考自:http://docs.saltstack.com/en/latest/ref/file_server/file_roots.html

题外话

在测试 Salt-Master 的时候,用 ps -ef | grep salt 命令查看,发现竟然有9个 salt-master 进程,查看手册发现了这么一段话:

When the master daemon starts, it is expected behaviour to see multiple salt-master processes, even if ‘worker_threads’ is set to ‘1’. At a minimum, a controlling process will start along with a Publisher, an EventPublisher, and a number of MWorker processes will be started. The number of MWorker processes is tuneable by the ‘worker_threads’ configuration value while the others are not.

详情参考 salt 手册的 master 章节。

参考资料


  1. Salt 官方手册的如下章节:
  2. 系统自动化配置和管理工具 SaltStack
  3. 运维自动化之salt学习笔记
  4. Salt 防火墙配置
  5. Salt 客戶端安裝

(本文是著名博客Coding Horror的作者Jeff Atwood为纪念Aaron Swartz所写,原文发表于2013年1月21日)

作者: Jeff Atwood
译者: 知北游
原文: http://www.codinghorror.com/blog/2013/01/the-end-of-ragequitting.html

当Joel Spolsky,我在Stack Overflow和Stack Exchange的商业伙伴,问我离开Stack Exchange后的打算时,我清楚的记得,我提到了Aaron Swartz。对于我们黑客来说,Aarron意味着高尚的典范,无私的行为和正能量,这些是所有的黑客极想做——但很少人能真正做到的。

如今,Aaron走了,在他26岁风华正茂的年纪。他无法再贡献更多的成就了。

我没见过Aaron,但我了解Aaron。

aaronsw

尤其是,我感到失望。

我对我自己感到失望,因为我没有意识到政府对Aaron的指控是那么的严厉和不公。对一桩尚未结束的法律案件,其全部的,荒唐的细节或许未能完整披露。但是我们本该抗议的。我很内疚,因为我没有为他的辩护尽哪怕一点的力,既没有给予他经济帮助,也没有为他写点什么。我盲目的认为他能赢,因为在我们的国家,当那些积极分子站在公平,开放和自由一方时,往往足够幸运。但是我错了。

我对我们的政府感到失望,因为它不遗余力的去惩罚一个显然是社会积极力量的人。惩罚一个从12岁开始,为使这个世界变的更好,时时处处竭尽全力的人。惩罚一个没有任何罪过的人。就是这个荒唐的政府被Aaron的家人证实是导致他自杀的直接原因

我对那种认同殉难行为的想法感到沮丧。Aaron的死,现在已经成为一个推动改变的有效工具,一个战斗口号;验证了那个荒谬的教训:没有人会严肃的看待一个问题,直到一位伟大的人为之牺牲。那种认为Aaron的自杀是一种可行的策略,比继续面对当下的官司和剩余的人生更有价值的想法,使我出离愤怒。

还有,我不得不承认,我对Aaron有些失望。我知道,抑郁症是一种很严重的病,无论一个人多么强,都有可能被这种病催跨。但是他选择积极分子这条路已经很久了。而积极分子这条路就是为推动变革而战斗,任重而道远。Aaron有坚定的朋友,强大的支持群体,和始终为其指引方向的敏锐的道德意识。正是这些原因,他起初就获得了强大的支持者,坚定的朋友以及很多积极分子的追随。

选在马丁路德纪念日,来写文章纪念Aaron,非常合适,因为他也是为道德事业而不懈努力的人

我希望你们能明白我的意思。我绝不赞同回避或反抗法律,就像狂热的种族隔离那样。那会导致混乱。如果一个人要打破不公正的法律,他必须公开的,充满善意的去做,并且甘愿接受惩罚。我认为,一个人能做到打破他良心无法接受的不公正的法律,并且甘愿承担坐牢的惩罚以唤醒大众的良心,是在表达对法律最高的敬重。

我们先明确一点,发生在Aaron身上的事,是不公正的,非常不公正,几乎可以说是渎职。我曾经参与过一个审判,但是我仍然不敢想象,如果美国政府动用所有的资源,在一年多的时间里,带着十足的偏见对我施压的情形。据估计Aaron的应诉据需要花费数百万。一个如此守法的公民将被永远的打上罪犯的标签——至少得服刑一段时间,被剥夺基本的公民权利和选举权 ——这个想法肯定给了Aaron沉重的负担。况且Aaron 经常受抑郁症困扰,这众所周知。早在2002年,他就在他的博客上公开表示过自杀的意愿。

我更多的想到是ragequitting

Rage Quit,有时也写成一个词RageQuit,是一个网络俚语,说的是因为争吵、挫折或者只是输掉了游戏,就突然退出游戏或聊天室的行为。

在Stack Exchange上,因为我们的规定太严格,每六个月就有至少一个用户销户。有些人不喜欢条条框框,当他们在所选择的游戏中,与规则冲突时,采取的回应方式非常糟糕。这种事情经常发生,迫使我们不得不制定更多的规则来应对,甚至迫使我考虑ragequitting。

我对 Mark Pilgrim_why ragequitting 互联网的事情非常愤怒,因为他们同时把他们的文章也撤走了——他们是如此的败兴,干脆就带着他们的球,回家了,这样谁都别玩了。太鲁莽了。Ragequitting是幼稚,是一种不成熟的标志。但是,坚持到最后,主宰自己的生活,那才是成熟勇敢。坚持到游戏的结束,走完后面的所有人生,等终场的时候,再退出

我这么说,不是站在Aaron的评价者的立场,而是站在一个自认为与Aaron最近一起为同一目标奋斗的队友的立场来说的。这一点,我 —— 相信Aaron自己也是—正在积极的思考。但是我越是研究,越是思考这件事,就越是觉得这其实就是:放弃。而这给亲友们的损失将是难以估量和承受的。

发生在Aaron 身上的事情是不公正的,非常不公正。但这恰恰是积极分子的路。越不公正,你最终获胜时,赢得的就越多。并且,我深信,绝对的,完全的深信,Aaron必将获得胜利。他本可以继续做更多伟大的事情的。因为我们没能给Aaron 提供他所需的支持,现在是无法看到他更多的成就了,这是我们最大的失败。我们现在所能做的就是继续他的遗志,并呼吁我们腐败的政府改变强行起诉的行为

我知道,有时天会很黑。但我将会和你在一起。无论何种境况,都不要通过你的ragequitting,使别人满意。他们不配。要继续其他的,更好的玩法,着眼于长远。

7月份时候,下决心花了3.5K银子装了一台能入流的主机,兴冲冲的安装上了Ubuntu Server 12.04 LTS, 却发现因为主板上的网卡芯片(AR8161)太新,驱动还没测试稳定,尚未加入内核。还好搜到了解决的办法:编译compat-wireless的源码包。当时网上相关的文档还比较少,现在已经好找多了。算是翻译把。

1. 在无网络的情况下,安装编译环境 build-essential

参考上一篇文章Ubuntu 平台离线安装软件包

2. 编译安装 alx

下载并解压compat-wireless的源码包, 进入解压后的目录:

wget -c http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-2012-07-03-pc.tar.bz2
tar xvf compat-wireless-2012-07-03-pc.tar.bz2
cd compat-wireless-2012-07-03-pc

配置网卡型号:

./scripts/driver-select alx

编译安装:

sudo make && make install

如果编译安装过程没有报错的话,最后会提示几个操作加载内核模块,图省事的话直接重启就行了。

检查安装结果:

ifconfig -a

看见 eth0 了吗? :-)

基本原理

apt-get install 的 –print-uris 选项可以打印出包依赖列表:

–print-uris
Instead of fetching the files to install their URIs are printed. Each URI will have the path, the destination file name, the size and the expected md5 hash.

apt-get install 会优先检查本地缓存目录 /var/cache/apt/archives/ ,如果这个目录存在依赖列表中的软件包,且版本一致,则不会再尝试通过网络下载。

基本操作

打印所有依赖包的URI列表:

sudo apt-get install --print-uris -y build-essential | grep deb

截取其中的路径和文件名,整理成一个列表文件, 保存为一个文件(例如:uris.lst):

/pool/main/g/gcc-4.6/libgomp1_4.6.3-1ubuntu5_amd64.deb  
/pool/main/m/mpfr4/libmpfr4_3.1.0-3ubuntu2_amd64.deb   
/pool/main/g/gcc-4.6/libquadmath0_4.6.3-1ubuntu5_amd64.deb  
/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb  
/pool/main/b/binutils/binutils_2.22-6ubuntu1_amd64.deb  
/pool/main/e/eglibc/libc-dev-bin_2.15-0ubuntu10_amd64.deb  
/pool/main/l/linux/linux-libc-dev_3.2.0-29.46_amd64.deb  
/pool/main/e/eglibc/libc6-dev_2.15-0ubuntu10_amd64.deb  
/pool/main/g/gcc-4.6/cpp-4.6_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-defaults/cpp_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-4.6/gcc-4.6_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-defaults/gcc_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-4.6/g++-4.6_4.6.3-1ubuntu5_amd64.deb  
/pool/main/g/gcc-defaults/g++_4.6.3-1ubuntu5_amd64.deb  
/pool/main/m/make-dfsg/make_3.81-8.1ubuntu1_amd64.deb  
/pool/main/d/dpkg/libdpkg-perl_1.16.1.2ubuntu7_all.deb  
/pool/main/d/dpkg/dpkg-dev_1.16.1.2ubuntu7_all.deb  
/pool/main/b/build-essential/build-essential_11.5ubuntu2_amd64.deb  
/pool/main/f/fakeroot/fakeroot_1.18.2-1_amd64.deb  
/pool/main/liba/libalgorithm-diff-perl/libalgorithm-diff-perl_1.19.02-2_all.deb  
/pool/main/liba/libalgorithm-diff-xs-perl/libalgorithm-diff-xs-perl_0.04-2build2_amd64.deb  
/pool/main/liba/libalgorithm-merge-perl/libalgorithm-merge-perl_0.08-2_all.deb  
/pool/main/m/manpages/manpages-dev_3.35-0.1ubuntu1_all.deb  
/pool/main/l/linux/linux-libc-dev_3.2.0-29.46_amd64.deb

将这个uris.lst文件拷贝到一个联网的机器上面,选择一个合适的ubuntu源,下载这些deb包(有多种下载方式, 下面是一个示例脚本):

cat uris.lst | while read uri
do
    wget -c  http://ubuntu.srt.cn/ubuntu${uri}
done

将下载的这些deb包拷贝到目标机器的/var/cache/apt/archives目录下面,执行安装命令:

sudo apt-get install build-essential

完成安装。

去年曾在 aws 上面用 wordpress 搭了一个博客,这是当时的初篇:

hello, world

2011-11-11

#include <stdio.h>
main()
{   
	printf("hello, world\n");
}

用这段经典的C代码作为博客的初篇,为致敬前辈,为纪念过往,更为督促自己。

许多的事情,只有回过头再看时,才能体会到第一步的分量,而心存感激;也有一些事情,到末了,没有机会回头,或不堪回头。无论如何,这第一步,都该深埋一个脚印,发不发芽,皆当安之若素。

将近一年过去了,不想竟然是“不堪回头”。aws 的一年免费试用期快到了,现在用 jekyll 重新搭建了一个静态博客,希望能将精力集中在内容上面。

现在引用旧约《圣咏》一二六篇,作为新博客的开篇,算是祝福吧

上主带领俘虏回到熙雍,我们觉得彷佛是在梦中;
那时,我们满口喜气盈盈,我们双唇其乐融融。
那时,外邦异民都赞叹不已:上主向他们行了何等奇事!
上主向我们行了伟大奇迹,我们的确也觉得满心欢喜。
上主,求你转变我们的命运!就像乃革布有流水的浇淋。
那含泪播种的人,必含笑获享收成;
他们边行边哭,出去播种耕耘,他们载欣载奔,回来背着禾捆。