Tag Archives: linux

【经验】Debian 建议安装源

1. 一般系统软件新版 backports

sudo tee /etc/apt/sources.list.d/backports.list << EOF
deb http://mirrors.aliyun.com/debian wheezy-backports main
deb-src http://mirrors.aliyun.com/debian wheezy-backports main
EOF

安装backports时

sudo apt-get -t wheezy-backports install pkgname

2. dotdeb

nginx已经出了官方源,但是坑很多,比如 这个。所以现在仍继续用dotdeb打包的nginx。另外如果对redis-server、zabbix、mysql5.6、php5.5有需求可以继续选用

curl http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/dotdeb.list << EOF
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
EOF

Continue reading

【挂傻逼】一直在犯2,从未有提升

这几天傻逼的事情真的没少做。

首先,3月31日转移CDN数据的时候,那台机器上还有个FTP要配置。FTP嘛,想着yum install vsftpd之后chroot锁一下,基本就ok了。结果一开始ftp根本就连不上,好,iptables关掉先。然后报530,找了半天发现我很傻逼地把ftp的用户写进了/etc/vsftpd/user_list。这个修了之后又发现chroot没锁住,最后总算找到了是chroot_local_user=YES的问题。完整配置如下:

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=NO
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
pasv_min_port=30001 pasv_max_port=31000

那天半夜本来写完中二满满的错误页面就关机睡觉的,因为在终端,就直接敲sudo shutdown -h now了,结果没出现让我输入sudo密码而是直接提示系统准备关机,心里就咯噔了–ssh还没登出呢!还好本来就是维护状态,没什么太大损失,找另外一台前端机器重写错误页面就完事了。不过这直接给我造成了再也不敢用命令行关机的阴影。

然后4月1日各种被电信坑。迁移机房前端后端各种改IP,最关键是TMD前端的机器和后端的不能互通,表现为前端机ping后端机器,抓包显示后端机器发出ICMP echo但是前端收不到回显。后来查明是电信的问题(大概是路由策略?)。这还没完,之后继续各种犯2,比如改了error_log但是log就是不显示,连文件都没创建。再一看我修改的文件根本没被ln -ssites-enabled。再比如xxx不能访问,这种事情就绝壁是iptables姿势不对了。以前记得改过的规则ssh上去一看不知道为什么就变了,于是又必须重新来。最后主站好不容易跑起来,dns指向还不对,于是某些ip访问我们主站就会得到大姨妈页面。监控宝持续报错(忘记改ip)。mysql主从同步binlog报错#$!@$#^%#^$%^(同步到xx表的时候就#$@$$)…

主服挂的时候流量全跑匿名版,于是现在匿名版流量也快爆了,过几天要是上不去的话千万别惊讶=.=

最坑爹的是!昨天下班之后和主程闲聊说我们后端不应该能ping通,于是我想某些后端服上有iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited,就给主服加上了,结果大家都知道了…后来一想明明就是一个-p ICMP的问题,我干嘛脑抽去reject所有INPUT啊,简直就是作得一手好死(。联系机房前后花了一个多小时才搞定,以后动iptables先扔虚拟机的arch测完了再扔上去比较保险。

说到底上面尽是一些低级错误,我都怀疑自己是否真的适合搞运维了。不过原来运维说就算我转行写程序,爆个漏洞几万就没了,心里也就释然了。(哪里应该释然了啊混蛋!!!)

果然我这种半吊子 #实习生 就是拖垮工作效率……

唉我到现在都只能望着基米神喵pt等巨巨们的背影前进,简直弱爆了…

 

【同期】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

freebsd初体验

被囧三同学 @93rf 拉去修php5-gd库的问题,顺便第一次体验了bsd系server(以下略称bsd)…

之前对freebsd的映像还停留在【进个桌面要半天】【安装过程奇葩】【小心inode耗尽】之类的。第一次玩bsd很顺利地就ssh进去了,不错嘛(喂…

freebsd的cc为clang,shell默认用的csh,但是bash的一套快捷键貌似都可以用(废话readline),所以违和感全然…

php-gd库的攻略设定在此(日语),总之是改 php[ver]-extensions 的Makefile之后再make install,然后问题解决…

然后我就在想包管理在哪里,不是有个ports什么的么?就像debian系的apt-get、rh系的yum、arch的pacman && yaourt之类的东西,于是理所当然的输入ports install pkgname,提示cnf…然后Google了一下,然后整个人都惊呆了,也理解了为啥一般的bin都放在/usr/local下面,因为…人家就是全编译安装的啊!就和gentoo一样…难怪安装的时候可以多开。用 @felixonmars 的话来说,就是

太不低碳了!

vim也没有iftop也没有mutt也没有,一大堆用的东西都没有。装呗,慢慢make,不然怎么办…又想反正是全新的环境,干脆shell也换掉好了,传说zsh很强大就换zsh吧!于是照着 这个(日语) 简单整了下,结果发现prompt是乱码,又照着 这个(日语) 改了下,感觉不错。可是…Home End Delete一个能打的都没有!又放狗搜到Arch的wiki链接到archlinux论坛的这个帖子总算可以用了!仔细看看比bash着实漂亮(咦

mutt发不了邮件,不知道怎么回事… 编译mtr忘了去掉x的依赖,结果后来,嗯,opengl都出现了,等了一个小时,然后在gtk2的时候error自动退出了,2333333333

接下来是vim的配置。由于他要写php,于是直接把家里那套龊配置弄上去,发现自动补全的路径补全不能用,DGBPavim的按键绑定有问题,就NerdTree正常点。我现在也懒得看是怎么回事了,睡醒了再接着搞。

既没有/proc又没有/sys,所以htop无解。还好安装的时候就提示要改/etc/fstab。挺亲切哈…
crontab -e进去看了下半点注释都没有,收回刚才那句话……

现在问题list:

  1. mutt不能发邮件
  2. vim的键映射问题
  3. vim自动补全问题

还没有去找bsd的特色(据说很稳定,不过软件少当然稳定了(ry)和zsh的优势(据说补全很NB?)什么的,今天累了就只写这么多。

总体感觉这次bsd之旅:比较坑爹、低效、低碳。

还是我大ubuntu舒服,稳定,简单,软件包管理也不错,打包规则通俗易懂,文档健全资料多,桌面服务器两手抓…总之老少皆宜。

简易apn代理搭建

参考 @bao3 的 这个和 这个

准备

  • 国内vps一台(上行要够)
  • 国外vps一台
  • 平台推荐ubuntu12.04/centos6.3/freebsd9。本人以第一个为准

步骤

http代理

  • apt-get install squid privoxy #安装squid和privoxy
    参考配置见下一节
  • 可选,用乱序补丁过的ssh,两边机器都要编译)
        git clone https://github.com/brl/obfuscated-openssh
        apt-get install build-essential zlib1g zlib1g-dev libssl-dev autossh
        cd obfuscated-openssh
        ./configure
        make
        make install
    • 国外vps(server侧)
      • vim /usr/local/etc/sshd_config
      • 加上这些

        Protocol 2
        ObfuscatedPort 4096 #你的自定义端口
        ObfuscateKeyword fdb713 #你的乱序密钥

      • 启动服务
          /usr/local/sbin/sshd
    • 国内vps(client侧)
      • 编辑环境变量 vim /etc/environment
      • 为了让autossh使用乱序补丁的ssh,加上

        AUTOSSH_PATH=”/usr/local/bin/ssh”

      • 在国外vps上专门开个ssh -D用帐号,shell就给/bin/false
        或者/usr/sbin/nologin好了,扔好公钥
      • autossh -M 9001 — 你的用户名@国外vps -fxND4444 -p你的端口 -z -Z 你的乱序密钥
        用 — 是为了隔绝autossh和ssh本身参数。比如
        autossh -M 9001 — fdbssh@192.168.1.1 -fxND4444 -p4096 -z -Z fdb713
      • ps aux | grep ssh
        同时看到ssh和autossh启动就算成功,如果失败加vv看调试信息。
      • 监视autossh脚本请自行发挥…

Continue reading