热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在linux下从源码包安装libmysqlclient、snort

一、从RPM包安装libmysqlclient:由于数据库服务器安装在xp上,因此,在linux中只需安装mysql的客户端库就可以了。根据snort.
一、从RPM包安装libmysqlclient:

由于数据库服务器安装在xp上,因此,在linux中只需安装mysql的客户端库就可以了。
根据snort.org上的《Snort Installation Manual - Snort, MySQL, Redhat 7.3 》中
《snort Installation》小节的指导下过来两个包:
MySQL-client-5.0.22-0.i386.rpm
MySQL-devel-5.0.22-0.i386.rpm
键入以下命令安装:
#rpm -ivh MySQL-client-5.0.22-0.i386.rpm
#rpm -ivh MySQL-devel-5.0.22-0.i386.rpm
安装好以后,在 /usr/include/mysql/ 目录中存放有libmysqlclient的头文件mysql.h,在 /usr/lib/mysql/ 目录中存放有mysql的库文件,但只有.a结尾的(即静态库)库文件(包括libmysqlclient.a),没有.so(共享库)文件。
使用如下命令编译一个简单的测试程序(代码在本文结尾处给出):
#gcc -c -I/usr/include/mysql mysql-test.c
此命令成功生成了目标文件mysql-test.o。
继续键入以下命令。
#gcc -o --static mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient
注意参数的顺序,gcc有时会因为某些参数顺序不对而报错,某些相关参数的具体顺序应该如何,还望高人指点。
以上命令确给出了数不清的“引用未定义符号”的错误信息,引用未定义符号的是libmysqlclient.a
带着希望折腾了许久,最后决定从源码包安装mysql客户端程序库。
卸载MySQL-client与MySQL-devel:
#rpm -e MySQL-client
#rpm -e MySQL-devel
以上两条命令将直接删除rpm -ivh 所释放的所有文件及其创建的文件夹。
二、从源码包安装mysql客户端程序库。
#tar -zxvf mysql-5.0.22.tar.gz (mysql-5.0.22.tar.gz位于/root目录)
#cd mysql-5.0.22
进入mysql-5.0.22目录,阅读 INSTALL-SOURCES 文件,并看到几个关键选项:
1、--without-server
只编译安装客户端程序库,不编译mysql服务器程序,这在本机只需要libmysqlclient时很有用。
2、--enable-thread-safe-client
让libmysqlclient中的例程具有线程安全性,要编写多线程的mysql客户端程序时就少不了了,这要求本地拥有多线程库。
3、--prefix 指定安装目录
启动configure脚本:
#mkdir /usr/local/mysql
#./configure --without-server --enable-thread-safe-client --prefix=/usr/local/mysql
大概6分钟后,configure脚本生成好所有的Makefile后退出。
当前目录下执行make进行编译:
#make
这个过程除了时间长一点以外没有别的,大概一个钟头后make完成编译任务。
安装:
#make install
这个过程也比较快,约两三分钟。
安装完成以后,mysql.h文件在 /usr/local/mysql/include/mysql/目录中(这里include目录中还有一个mysql子目录)。
以lib开头的库文件在/usr/local/mysql/lib/mysql/目录中(与mysql.h的情况一样,这里lib目录中还有一个mysql子目录)。
 
此时再来链接测试程序的目标文件:
#gcc -o mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient
OK,一切正常,链接成功。
执行一下:
#./mysql-test
系统这时又发出错误提示:Loading libmysqlclient.so.15 Error; No Such File!
将/usr/local/mysql/lib/mysql/目录中的libmysqlclient.so.15.0.0复制到/usr/lib/目录下:
#cp /usr/local/mysql/lib/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15
#./mysql-test
屏幕打印出:mysql_init() successed.后就不动了.
约莫90秒后打印libmysqlclient的提示信息:Can not connect to mysql server(110)
这时在windows xp的msdos控制台键入:
>netstat -na
看到了系统已经打开了3306端口,即mysql server确实在运行。
最后注意到xp中启用了系统防火墙, 禁用系统防火墙后回到linux的ppty键入:
#./mysql-test
这时,黎明的曙光终于出现了,提示信息告诉我,它已经连接上了XP中的mysql server。
三、从源码包安装snort2.0
目前snort最新版本为2.8,比2.0复杂一些,感觉刚入门的学习或是研究还是2.0好些,结构清晰且功能齐全。
进入snort2.0源码目录之后执行:
#./configure --enable-debug --with-mysql=/usr/local/mysql
--enable-debug 选项将snort编译到调试模式,这对于学习或研究都很有帮助。
--with-mysql=/usr/local/mysql 选项将使snort对mysql提供支持。

注意:--with-mysql的值是编译msyql时--prefix指定的路径,而非libmysqlclient.so所在的路径。
接着执行:
#make
#make install
这两个过程很顺利,总时间在10分钟之内。
四、创建snort数据库
在phpmyadmin中创建数据库snort2_0,然后import /snort-2.0.5/contrib/create_mysql.
phpmyadmin的控制台居然提示说sql脚本有语法错误!错误的语句为:
CREATE TABLE schema ( vseq        INT      UNSIGNED NOT NULL,
                      ctime       DATETIME NOT NULL,
                      PRIMARY KEY (vseq));
INSERT INTO schema  (vseq, ctime) VALUES ('107', now());
错误的地方在表名“schema”附近。查看snort-2.8.1的create_mysql脚本发现其对schema的使用
加了“``”号("`"为1左边的键),即修改如下:
CREATE TABLE `schema` ( vseq        INT      UNSIGNED NOT NULL,
                      ctime       DATETIME NOT NULL,
                      PRIMARY KEY (vseq));
INSERT INTO `schema`  (vseq, ctime) VALUES ('107', now());
  
修改完后再试一次,果然成功了。但其它的表并没有这样,如:
CREATE TABLE event  ( sid    INT     UNSIGNED NOT NULL,
                      cid    INT     UNSIGNED NOT NULL,
                      signature   INT      UNSIGNED NOT NULL,
                      timestamp     DATETIME NOT NULL,
                      PRIMARY KEY (sid,cid),
                      INDEX       sig (signature),
                      INDEX       time (timestamp));
                     
却没有报错。"schema"是mysql的保留字吗?在查找中。
这个问题在snort2.0.5的输出插件中也存在。如下述方式启动snort:
#snort -l /root/snort2.0_log -c /root/snort-2.0.5/etc/snort.conf

 snort.conf输出插件配置:
 #
 output database: alert, mysql, user=root dbname=snort2_0 host=172.16.178.87
 # password
 注意:如果user指定的数据库用户名没有设置密码的话,要将password关键字去掉,否则会出错。
)
结果snort在初使化过程中测试数据库时提示说schema_VERSION=0,不符合要求,即刻退出。
而查看schema表中的vseq明明是106。
最后在snort源码文件spo_database.c的CheckDBVersion函数中看到以下代码:
snprintf(select0, MAX_QUERY_LENGTH, "SELECT vseq FROM schema");
将其改成:
snprintf(select0, MAX_QUERY_LENGTH, "SELECT vseq FROM `schema`");
然后回到snort-2.0.5目录中执行 make uninstall, make, make install
(如果想再从头开始编译,需要执行以下几条命令
#make uninstall
#make clean
#rm config.cache 或 rm config.status (根据你的./configure脚本生成的文件确定)
#./configure
)
再执行:
#snort -l /root/snort2.0_log -c /root/snort-2.0.5/etc/snort.conf
这下snort终于在IDS模式中运行起来了。几分钟后查看snort2_0数据库,发现snort写入了许多数据。
五、仍然存在的疑问:
1、mysql server 处理表名为 schema 的查询时所发生的现象。
2、linux中如何查询从源码包安装的软件。
比如:这里的snort,rmp -q snort只提示“並未安裝套件 snort”


推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文详细介绍了在 Red Hat Linux 系统上安装 GCC 4.4.2 的步骤,包括必要的依赖库的安装及常见问题的解决方法。 ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 本文详细介绍了如何在CentOS 6.5系统上安装和配置Redis 3.0.6,包括必要的环境准备、软件包下载、编译安装及基本功能测试。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
author-avatar
手机用户2602882697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有