Linux rpmbuild简单介绍

本博客先前介绍过如何解压rpm包,演示了将.rpm包还原成源代码的形式。rpmbuild则是用来将源代码打包成.rpm格式的工具。

xxx.rpm 指普通的软件包,执行rpm -ivh xxx.rpm以后即是完成了安装;
xxx.src.rpm 指的是包含源代码的软件包,执行rpm -ivh xxx.src.rpm以后,并不是安装了该软件,而是在/root目录下生成一个名为rpmbuild的文件夹(RHEL5中在/usr/src),里面包含了此软件的所有源代码,还需要使用rpmbuild工具将源代码打包成.rpm或者.tar.gz格式的软件包,才能正常安装使用。

CentOS6 中安装rpmbuild:

yum install rpm-build

rpmbuild命令参数介绍
-bp 只作准备 (解压与打补丁)
-bc 准备并编译
-bi 编译并安装
-bl 检验文件是否齐全
-ba 编译后做成*.rpm和src.rpm
-bb 编译后做成*.rpm
-bs 只做成*.src.rpm
-tc -ti -ta -tb -ts 的功能类似,只是所需参数由spec文件变成tar包。

例如:

cd /usr/src/redhat/SPECS
rpmbuild -bp kernel-2.6.spec

更具体的用法说明: 继续阅读

LinuxVPS自动备份脚本(优化版)

网络上大家都在使用的一个自动备份的脚本(原作者应该是猫言猫语),我自己也在用,经过无数次的使用后发现此脚本存在着一定的BUG(长期使用此脚本的朋友肯定知道BUG在哪里)。自己把脚本改了一下,加入了一些判断,使脚本更加智能化。

改进内容:
1,避免了忘记检查本机是否安装FTP软件导致备份失败的BUG;
2,避免了本机忘记创建/home/backup目录导致备份失败的BUG;
3,去掉了将数据库发送至邮箱的过程;
4,网站文件和数据库不再分开,将压缩至同一个压缩包内;

直接把以下脚本复制到/root/backup.sh

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_USER=root     #mysql用户名
MYSQL_PASS=         #mysql密码
FTP_IP=             #远程ftp地址
FTP_USER=           #远程ftp用户名
FTP_PASS=           #远程ftp密码
FTP_backup=         #远程ftp上存放备份文件的目录,需要先在FTP上面建好
WEB_DATA=/home/wwwroot     #本地要备份的网站数据
#你要修改的地方从这里结束

if [ ! -f /usr/bin/ftp ]; then
    yum install ftp -y
fi
if [ ! -d /home/backup ]; then
    mkdir /home/backup
fi
 
#定义备份文件的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz

#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup
 
#导出数据库,一个数据库一个压缩文件
for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} -q --skip-lock-tables | gzip -9 - > ${db}.sql.gz;
	echo dumped /home/backup/${db}.sql.gz)	
done

#将导出的数据库和网站目录压缩为一个文件
tar zcf /home/backup/$DataBakName $WEB_DATA /home/backup/*.sql.gz

#删除本地已导出的数据库
rm -rf /home/backup/*.sql.gz
 
#上传到FTP空间,删除FTP空间5天前的数据
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
put $DataBakName
bye
END

继续阅读

Kagoya vps 1G方案测试

Kagoya是日本少数支付境外用户购买的VPS商家,基于OpenVZ技术。今天购买了Kagoya 1G方案(最低套餐)的VPS,价格为840日元,折合人民币56元左右。配置是3核、1G内存(Burst到2G),200G硬盘。以下是一些测试数据:

1,PING测试
全国范围有不同程度的掉包,甚至从美国、香港PING过去依然会掉包。看来线路的确很烂。

两张17CE测试图(点击可放大),测试时间为下午4点左右。
17ce测试

17ce测试

补充:晚上19:30再次测试了一下,北京电信PING值高达300-500ms。

2,网络、硬盘测试
网络非常一般,硬盘灰常给力! 继续阅读

Linux编写内核模块实例

本文演示了Linux加载内核模块(驱动)的过程,文中实验环境为CentOS 5.9 64bit。

1,准备工作
安装基础软件包

yum install kernel-devel.x86_64 gcc.x86_64 gcc-c++.x86_64

然后会在/usr/src/kernels/下面安装好内核源码包,最好把目录的名字改一下,以便能够与/lib/modules/$(uname -r)/目录相响应,避免/lib/modules/$(uname -r)/目录中有一些软链接找不到内核源码包位置

mv /usr/src/kernels/2.6.* /usr/src/kernels/$(uname -r)-x86_64

2,加入内核模块(驱动)
进入字符设备驱动目录

[root@localhost ~]# cd /usr/src/kernels/$(uname -r)-x86_64/drivers/char
[root@localhost char]# mkdir mycdev    #建立驱动目录
[root@localhost char]# cd mycdev/
[root@localhost char]# cat /proc/devices   #找一个未使用的字符设备主设备号,比如199,记好
[root@localhost mycdev]# vim mycdev.c    #建立内核态设备驱动程序,内容见下方
[root@localhost mycdev]# vim Makefile    #建立Makefile文件,内容见下方

继续阅读

Linux查看系统IO

Linux查看IO的工具主要有两个,iostat(集成于sysstat包中)和iotop。前者经常用于查看分区的IO情况,后者常用来查看每个进程的IO占用。

[root@bogon ~]# yum install sysstat
[root@bogon ~]# iostat -x 1       #每隔一秒显示一次
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
dm-0              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
hdc               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00

继续阅读

Linux内核调拭之printk用法(2)

本文演示了一下printk的基本用法,实验环境为CentOS 5.9 64bit

1,下载内核源码
下载地址是https://www.kernel.org/pub/linux/kernel/v2.6/
CentOS 5.9用的是2.6.18版,CentOS 6用的是2.6.32,下载对应版本的内核文件就可以了

# wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz
# tar -zxvf linux-2.6.18.tar.gz
# cd linux-2.6.18

2,修改内核

vim init/main.c  

查找start_kernel,在大约456行有如下内容:
……
asmlinkage void __init start_kernel(void)
{
        char * command_line;
        extern struct kernel_param __start___param[], __stop___param[];

        smp_setup_processor_id();

        /*  
         * Need to run as early as possible, to initialize the
         * lockdep hash:
         */
        lockdep_init();
……

系统从start_kernel()函数开始启动。所以我们要把printk()添加到这个函数里 继续阅读

CentOS5安装配置OpenVZ

CentOS5安装配置OpenVZ的过程,网上的教程大多都有问题,所以这里还是亲自记录一下吧。系统环境为CentOS 5.9 64bit

请linuxde点net转载本博客文章的时候加上链接http://www.zhukun.net/archives/6658/

1,事前准备

将系统内核升级到2.6.18.308.8.2.el5以上,否则不受支持
# yum install kernel.x86_64

调整内核参数
# vi /etc/sysctl.conf
...
net.ipv4.ip_forward = 1
kernel.sysrq = 1
...

关闭selinux
# vi /etc/sysconfig/selinux
...
SELINUX=disabled
...

2,安装OpenVZ 继续阅读