Monthly Archives: March 2013

记一次archlinux安装

貌似第一次安装安装是在2010年年末,嗯,虚拟机。然后试着在台式机安装,然后丢掉了一块分区还进不去系统,然后用了1年windows,然后重新用了大半年ubuntu,然后现在用上了os x和各种centos,然后闲得蛋疼重新尝试第n次安装archlinux。

变化最大的就是arch的安装更平易近人,对新人友好了,只要被各大linux发行版都肏过一遍安装一点问题都没有。镜像选择也很智能,完全不需要用到sed之类的流编辑工具。最关键的是其高质量的wiki实属Linux发行版中良心中的良心,句句珠玑,绝对不会发生要用户去手动arch-chroot到装好的系统去又不写应该执行grub-install /dev/sdx这种坑用户的事情。

Archlinux采取的滚动更新,能始终使系统保持最新的状态,比其他发行版能更早地体验到新的Kernel以及带来的易用性,这点也是其他发行版没办法比拟的。

Archlinuxer们也很活跃,一切以用户为中心,不像没节操的C社把ubuntu当成自己的独裁地盘。毕竟良好的发行版还得靠良好的社区环境去维持。

这一切的一切促使我再一次尝试这个优秀的发行版。在以后调教arch的路上,我也必须努力摆脱对各种自动生成东西的依赖。

最后感谢 @radaiming的邮件, @fisherduan 的电话帮助。

【同期】rsync+inotify+ssh==简单的单向文件同步

本文大部分引用自http://heylinux.com/archives/817.html虽然puppet之类的工具也很好用啦,但是仅仅是单向同步,总有种「まだあいつの出番ではない!w」(还没轮到那家伙出场呢!)的感觉。于是小小研究了下rsync+inotify-tools+ssh的方案,简单易行。在这里,暂时把同步的源头叫src,同步到的目的机器叫dst。本文以centos6为例,debian/ubuntu用户请自行把yum之类的脑补成apt-get之类的~

安装软件包

Linux kernel从2.6开始支持inotify-tools。于是src机器

[root@src ~]# yum install rsync inotify-tools

dst机器

[root@dst ~]# yum install rsync

如果提示没找到软件包,请参考 @boypt pt桑这篇博文

设定同步专用帐号

接下来,为两边机器,即srcdst都设定同步专用帐户

[root@src ~]# useradd -m rsync
[root@src ~]# passwd rsync
[root@dst ~]# useradd -m rsync
[root@dst ~]# passwd rsync

最好在dst上编辑/etc/passwd/etc/group使得两边rsync的uid和gid一致。别忘了改完这两个文件之后之后还要chown -R rsync:rsync /home/rsync

接下来作成src的公开键与秘密键,并把src的公开键扔到dst/home/rsync/.ssh/authorized_keys下面。记得authorized_keys权限600,.ssh目录权限700。
最后在两边机器上把想同步的目录的uid:gid也改成rsync:rsync

撰写同步脚本

[root@src ~]# vim dir.rsync

!/bin/sh
SRC=/path/to/dir/ #最后的\很重要! 
DST=rsync@dst's_ip:/path/to/dir
 
#su - rsync
inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
        do
                /usr/bin/rsync -ahqzt --delete $SRC $DST
        done

[root@src ~]# chmod +x !$

部分注释引用原文

相关注解如下:
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src}
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件

/usr/bin/rsync -ahqzt –delete $SRC $DST
-a 存档模式
-h 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件

要排除同步某个目录时,为rsync添加–exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加–exclude或–excludei参数,具体查看man inotifywait。

inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。

然后按照原文我始终不能成功,于是干脆以root权限运行,虽然有安全问题但是……不管了。

!$为bash中上一条命令的最后的参数。因为Meta键总是因为各种原因按不出来所以(ry (emacs什么的最讨厌了 #口亨

最后把dir.rsync&进后台以及cat进/etc/rc.local就ok了。如果中途感觉文件没同步过去记得检查要同步的目录里面的文件权限和各种其他的权限,以及善用bash -x

CentOS6でnetconsoleを動作

数日前、ある管理するサーバーが障害が発生。pingしてみたら「Host unreachable」を出てばっかりだった。「IDCと連絡を取らなければならない」という状況になった。。。人工でサーバーを再起動したあと、/var/log/messagesを見ると

Feb 27 12:25:11 localhost kernel: [Firmware Warn]: GHES: Poll interval is 0 for generic hardware error source: 1, disabled.
Feb 27 12:25:11 localhost kernel: GHES: Failed to enable APEI firmware first mode.

グーグルしても役に立つ情報も手に入れられなかった。

@felixonmars 様に「もしかしてこれからもこんな状況が出てきたらどうする?」と聞いた。彼は「netconsoleでカーネルダンプを他のマシンに出力しよう」って建議を提出した。グーグルでもう一度検索したが、CentOS5の設定方法しか表示しなかった。うちのサーバーがCentOS6なので、キーワードを変更して改めて検索した。でもその結果はがっかりだった。

サーバー側(監視側、この例には192.168.1.10)

CentOS6でsyslogdはもう存在しない。引き換えにrsyslogがカーネルの出力情報を記録する。じゃ、vim /etc/rsyslog.conf(コメント外しただけ)

$ModLoad imudp
$UDPServerRun 514

iptablesのルールを確認するのも必要。せめてudp514の開放を確認。

iptables -A INPUT -p udp -m udp  --dport 514 -j ACCEPT

最後にrsyslogを再起動。

service rsyslog restart

クライアント側(監視される側、192.168.1.69)

netconsoleを利用しただけではおk。 まずは、netconsoleを設定

vim /etc/sysconfig/netconsole

SYSLOGADDR=192.168.1.10
SYSLOGPORT=514

次は、netconsoleモジュールをカーネルに追加や起動。

chkconfig netconsole on
service netconsole start

試しましょう!

クライアント側、

echo m > /proc/sysrq-trigger

 

サーバー側、

tail -f /var/log/messages

 

Mar 2 14:08:58 SysRq :
Mar 2 14:08:58 Show Memory

これを見ればnetconsoleが正常に動作していると示します。