1月 04

centos下搭建yum服务器自动同步源

  在内网中建立yum服务器,内网linux服务器可以使用yum升级。这样做有两个好处,一内网服务器不用登陆公网比较安全,二节约了流量,不用每台服务器更新都连到公网上。
  安装配置比较简单。需要nginx或apache,本次只列出了nginx配置。还需要rsync工具,建议使用命令“yum install -y rsync”。
  yum服务器内网地址192.168.100.100

Nginx配置

#######################################yum server
server {
        # 直接使用IP地址
        server_name 192.168.100.100;
        # 开启自动显示目录
        autoindex on;
        # 显示文件大小
        autoindex_exact_size off;
        # 显示服务器本地时间
        autoindex_localtime on;
        # yum放置目录
        root    /u01/yumserver/;
        # 内网可见
        allow 192.168.100.0/24;
        # 除上列ip均不能查看
        deny all;
        # 限制ip后会报403错误,做个跳转
        error_page 400 403 404 500 502 503 504 = http://www.simonzhang.net;
        }

同步脚本,将脚本有可执行权限,将此设置到crontab即可。

#!/bin/bash
# -------------------------------
# Revision: 
# Date:        2012-12-11
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Web:         www.simonzhang.net
# ------------------------------- 

# base value
# 要同步的源
YUM_SITE="rsync://mirrors.kernel.org/centos/"
# 本地存放目录
LOCAL_PATH="/u01/mirrors/centos/"
# 需要同步的版本,我只需要5和6版本的
LOCAL_VER="5 5* 6 6*"
# 同步时要限制的带宽
BW_limit=512
# 记录本脚本进程号
LOCK_FILE="/var/log/yum_server.pid"
# 如用系统默认rsync工具为空即可。
# 如用自己安装的rsync工具直接填写完整路径
RSYNC_PATH=""

# check update yum server  pid
MY_PID=$$
if [ -f $LOCK_FILE ]; then
    get_pid=`/bin/cat $LOCK_FILE`
    get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
    if [ $get_system_pid -eq 0] ; then
        echo $MY_PID>$LOCK_FILE
    else
        echo "Have update yum server now!"
        exit 1
    fi
else
    echo $MY_PID>$LOCK_FILE
fi

# check rsync tool
if [ -z $RSYNC_PATH ]; then
    RSYNC_PATH=`/usr/bin/whereis rsync|awk ' ''{print $2}'`
    if [ -z $RSYNC_PATH ]; then
        echo 'Not find rsync tool.'
        echo 'use comm: yum install -y rsync'
    fi
fi

# sync yum source
for VER in $LOCAL_VER;
do 
    # Check whether there are local directory
    if [ ! -d "$LOCAL_PATH$VER" ] ; then
        echo "Create dir $LOCAL_PATH$VER"
        `/bin/mkdir -p $LOCAL_PATH$VER`
    fi
    # sync yum source
    echo "Start sync $LOCAL_PATH$VER"
    $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH$VER
done

# clean lock file
`/bin/rm -rf $LOCK_FILE`

echo 'sync end.'
exit 1

centos_yum_server

客户端配置
编辑/etc/yum.repos.d/CentOS-Base.repo
#base
[base]
name=CentOS-$releasever – Base
baseurl=http://192.168.100.100/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever – Updates
baseurl=http://192.168.100.100/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras
baseurl=http://192.168.100.100/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever – Plus
baseurl=http://192.168.100.100/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib – packages by Centos Users
[contrib]
name=CentOS-$releasever – Contrib
baseurl=http://192.168.100.100/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

12月 09

raspberry pi安装 java mysql tomcat

  raspberry pi安装 java mysql tomcat。开始用oracle通的arm进行安装但是遇到了问题没有成功。后来还是采用apt-get安装,还是非常简单
$ sudo apt-get install openjdk-7-jdk mysql

版本如下:
Server version: 5.5.28-1 (Debian)
java version “1.7.0_07”

  tomcat也能直接安装,但是出于需要,还是直接到apache上下载。解压,默认配置启动。能看到可爱的小猫了。

rp tomcat

raspberry pi 安装tomcat

  查看配置源
$ vim /etc/apt/sources.list

  通过到源上查看haproxy、nginx、apache2、squid、tomcat7、cacti、nagios、snmp、redis、rsync、samba、python、php、lua、node.js等应有尽有,直接用工具安装非常方便。以后不再用考虑环境准备工作了。下一步开始准备做点实用的东西。

  对于要用桌面系统要还需要安装字体等
中文字体
$ sudo apt-get install ttf-wqy-microhei
输入法
$ sudo apt-get install scim scim-pinyin
音频驱动:
$ sudo apt-get install alsa-utils

3月 15

python中通过 pexpect 使用 rsync

  之前写了脚本,死循环调用inotifywait监控文件夹,如果文件有变动,则启动rsync进行同步。但是当前需求有点变化,文件要按照日期建文件夹进行存储,且文件变化很快,如果直接监控最顶级目录系统资源将消耗很大,所以考虑还是自写一下好,如果系统资源量变化大,且不用时时同步时可以根据文件变动对变动对文件进行记录,可以按照优先规则进行同步。
  官方网站 : http://trac.dbzteam.org/pyinotify
  系统要求:Linux kernel with inotify ≥ 2.6.13
Python ≥ 2.4

  直接使用easy_install安装非常简单
  # sudo easy_install pyinotify
  如果不能联网,则需要直接下载压缩包,进行编译安装。

  首先测试下是否可用:
  使用以下命令监控/tmp文件夹,
  # python -m pyinotify /tmp

在/tmp文件夹下新建1.txt,并随后进行删除。看到显示的记录如下:







  效果不错,继续向下进行。只要有创建、删除和关闭写就打印出变化的文件或目录,代码如下:

import  re
import pyinotify

wm = pyinotify.WatchManager()
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_CLOSE_WRITE
class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self, event):
        self.rebuild(event) 

    def process_IN_DELETE(self, event):
        self.rebuild(event) 

    def process_IN_CLOSE_WRITE(self, event):
        self.rebuild(event)

    def rebuild(self, event):
        chang_name=re.compile(".+\.swp$|.+\.swx$|.+\.swpx$")
        if not chang_name.match(event.pathname):
            print event.pathname 

handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('/tmp', mask, rec=True,auto_add=True  

notifier.loop()

  代码里使用正则表达式过滤因为使用vim打开文件产生的缓存文件。也可以用exclude_filter方法在官方文档中例子如下,但是我测试多次没有成功,所以直接用正则过滤。

# Exclude patterns from list
excl_lst = ['^/etc/apache[2]?/',
            '^/etc/rc.*',
            '^/etc/hostname',
            '^/etc/hosts',
            '^/etc/(fs|m)tab',
            '^/etc/cron\..*']
excl = pyinotify.ExcludeFilter(excl_lst)
# Add watches
res = wm.add_watch(['/etc/hostname', '/etc/cups', '/etc/rc0.d'],
                   pyinotify.ALL_EVENTS, rec=True, exclude_filter=excl)

  如果监控文件太多,需要对系统做一下修改sysctl -n -w fs.inotify.max_user_watches=16384。