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月 11

raspberry pi 自动初始化脚本

  玩了几天,打算刷一下。但是很多要升级也挺麻烦,直接写了个脚本,自动升级。大家如果还有自己需要的,也可以自行添加,这样初始就方便多了。
  先修改成亚洲的源
$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vi /etc/apt/sources.list
deb http://mirror.nus.edu.sg/raspbian/raspbian wheezy main contrib non-free rpi
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi

  如果直接用我的脚本命令如下:
$ wget http://www.simonzhang.net/wp-content/uploads/2012/12/pisystemupdate.py_.gz
$ gunzip pisystemupdate.py_.gz ;chmod a+x pisystemupdate.py_;python pisystemupdate.py_
不知道为什么加了个尾巴

  脚本内容如下:

#!/bin/env python
# -*- coding:utf-8 -*-
# Revision:
# Date:        2012-12-10
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Web:         www.simonzhang.net
# -------------------------------
import os
import time

def SystemUpdate():   #系统升级
    try:
        os.system('sudo apt-get -y update')
        _get = 'ok'
    except:
        _get = 'ERROR'
    return _get

def Timing():   #校时
    try:
        os.system('sudo cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime')
        os.system('sudo apt-get install -y ntpdate')
        os.system('sudo /usr/sbin/ntpdate stdtime.gov.hk')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def Vncserver():    #远程桌面
    try:
        os.system('sudo apt-get install -y tightvncserver') 
        _get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def DevelopTool():    #开发工具
    try:
        os.system('sudo apt-get install -y gcc make')
        _get = 'ok'
    except:
        _get = 'ERROR'
    return _get

def SystemTools():    #系统常用工具
    try:
        os.system('sudo apt-get install -y bison gawk vim chkconfig') 
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def PythonTools():   #python 管理工具
    try:
        os.system('wget -q http://peak.telecommunity.com/dist/ez_setup.py')
        os.system('sudo python ez_setup.py')
        os.system('sudo easy_install pygame')
        _get = 'ok'
    except:
        _get = 'ERROR'
    return _get

	
def PythonImage():    #python的图片处理
    try:
	os.system('sudo apt-get install -y libjpeg*-dev')
	os.system('sudo apt-get install -y python-imaging') 
	os.system('sudo apt-get install -y python-dev')
	os.system('sudo easy_install tornado PIL')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def PythonFrame():    #python框架
    try:
        os.system('sudo easy_install tornado Django')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get

def OpenCV():   #摄像头
    try:
        os.system('sudo apt-get install -y python-opencv')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def InstallMysql():   #数据库,密码为pi
    try:
	os.system('sudo debconf-set-selections <<< \'mysql-server-5.5 mysql-server/root_password password pi\'')
	os.system('sudo debconf-set-selections <<< \'mysql-server-5.5 mysql-server/root_password_again password pi\'')
	os.system('sudo apt-get -y install mysql-server')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get


def Installjava():   #java环境
    try:
	os.system('sudo apt-get install -y openjdk-7-jdk')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get

def ChineseFont():   #中文字体
    try:
	os.system('sudo apt-get install -y ttf-wqy-microhei')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get
	
def InputMethod():   #输入法
    try:
	os.system('sudo apt-get install -y scim scim-pinyin')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get

	
def AudioDriver():   #音频
    try:
        os.system('sudo apt-get install -y alsa-utils')
        os.system('sudo modprobe snd_bcm2835')
	_get = 'ok'
    except:
        _get = 'ERROR'
    return _get

	
def main():
    install_list = [SystemUpdate, \
                    Timing, \
                    Vncserver, \
                    DevelopTool, \
                    SystemTools, \
                    PythonTools, \
                    PythonImage, \
                    PythonFrame, \
                    OpenCV, \
                    InstallMysql, \
                    Installjava, \
                    ChineseFont, \
                    InputMethod,  \
                    AudioDriver, \
                    SystemUpdate,
                   ]
    for il in install_list:
        print '*' * 50
        print ': %s start' % il
        print '*' * 50
        install_status = il()
        nt = time.localtime()
        log_time = "%s-%s-%s %s:%s:%s" % (nt[2], nt[2], nt[3], nt[4], nt[5], nt[6])
        log_file = open("pi_install.log", "ab")
        log_file.write("%s %s install %s\n" % (log_time, il, install_status))
        log_file.close()
    os.system('sudo apt-get upgrade -y')
    print "Install all end."


if __name__ == '__main__':
    main()

pisystemupdate.py