Bugzilla和Mantis安装部署

Bugzilla和Mantis安装部署

Bugzilla 部署步骤有的小麻烦,但Mantis部署很简单,下载包,数据库设置按部就班就可以了。

这里记录一些安装中的问题:

mantis1.Mantis 配置文件config_inc.php,需要修改的内容:
数据库配置:
$g_hostname = ‘localhost’;
$g_db_type = ‘mysql’;
$g_database_name = ‘jaguardb’;
$g_db_username = ‘dbusr’;
$g_db_password = ‘xxxxxxx’;

配置时区:
$g_default_timezone = ‘Asia/Shanghai’;
否则出现:SYSTEM WARNING: ‘date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

2.Bugzilla 安装配置

bugzilla

1.安装perl模块
检查依赖的CPAN包模块:sudo perl checksetup.pl,进行安装
sudo perl install-module.pl  –all
报错: install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted. Compilation failed in require at (eval 1231) line 3, <DATA> line 577.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib  /usr/lib/libmysqlclient.18.dylib

2.配置localconfig配置文件
$db_driver = ‘mysql’;
$db_host = ‘localhost’;
$db_name = ‘bugszilla’;
$db_user = ‘dbusr’;
$db_pass = ‘acbxxxxxxx’;
3.配置Apache文件/etc/apache2/httpd.conf

<Directory “/Library/WebServer/Documents/bugzilla”>
Options ExecCGI FollowSymLinks
AddHandler cgi-script .cgi
DirectoryIndex index.html index.html.var index.cgi
order deny,allow
Allow from all
</Directory>

Mac OSX配置部署Apache+php+mysql

Mac OSX配置部署Apache+php+mysql

Mac OSX 系统本身已经集成apache,php,perl,因此只要更改一些配置,另外mysql需要安装。

PHP-Mysql

1.启动Apache

    sudo apachectl start

配置文件的位置:/private/etc/apache2/httpd.conf
关注这里。访问http://localhost网站根目录:index.html.en首页文件。

DocumentRoot “/Library/WebServer/Documents”

我的MAC原来10.6,一步一步(10.7-10.8)现已经升级至10.9.2用户目录下本身已经存在Sites目录(用户文件目录)和网页文件。为了可以直接访问用户目录下得网站目录Sites:

建立软链接:

  sudo ln –sf  /Users/wangzhe/Sites /Library/WebServer/Documents/Sites

在httpd.conf  添加:

<Directory “/Users/wangzhe/Sites”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

或者在/private/etc/apache2/httpd.conf 加上

Include /private/etc/apache2/users/*.conf

访问出现:403 Forbidden. You don’t have permission to access /Sites on this server.

配置多次修改错误一直存在。怀疑权限问题。User/wangzhe /Sites  权限为:drw-r–r–+  需要修改为755。

chmod 755 User/wangzhe /Sites

问题解决!

2.配置php

php配置文件在/etc/php.ini  ,可将原有php.default.ini 重命名为php.ini
将/etc/apache2/httpd.conf 中php支持注释去掉。浏览器中测试PHP。

3.安装配置 mysql 和phpmyadmin

(1)下载MySQL Community Server  选择Mac OS X 10.7 (x86, 64-bit), DMG Archive 下载

(2)安装mysql-5.6.17-osx10.7-x86_64.pkg ,MySQLStartupItem.pkg以及MySQL.prefPane. 安装的目录在 /usr/local/mysql-5.6.17-osx10.7-x86_64

(3)建立软链接

ln –s /usr/local/mysql-5.6.17-osx10.7-x86_64/bin/mysql /usr/local/bin/mysql
ln –s /usr/local/mysql-5.6.17-osx10.7-x86_64/bin/mysqladmin /usr/local/bin/mysqladmin

(4)启动mysql,使用系统偏好设置中的可视化面板或者在终端输入:

sudo /usr/local/mysql/support-files/mysql.server start

(5) 修改mysql 用户root密码

mysqladmin -u root password ‘passwd’

(6)安装phpMyAdmin,将下载phpMyAdmin-4.1.12-english.tar.gz解压到:

/Library/WebServer/Documents下,重命名为phpMyAdmin。

(7) 修改配置:将phpMyAdmin下的config.sample.inc.php文件重命名为config.inc.php,修改

$cfg[‘Servers’][$i][‘host’] = ‘localhost’; 将localhost修改为 127.0.0.1

浏览器中输入http://localhost/phpMyAdmin/

至此,环境部署完毕。

VMware 中Linux 调整分区大小

VMware 中Linux 调整分区大小

Fedora_logo

Precondition :VMware Player 中安装的Fedora 17 Linux 32bit,个人较久远的测试环境,安装时没有进行磁盘规划,默认20G空间(动态调整),安装在根/下。
Background :在上述环境中安装IBM DB2 Express-C 10.5(v10.5fp1_linuxia32_expc.tar.gz),安装时/tmp空间不足,无法安装。
Plan:需要进行磁盘扩容。考虑到使用VMware Player虚拟机。

1.首先调整虚拟机大小:player_vm_fedora

2.虚拟机开机,使用fdisk 命令新建新区 fdisk  /dev/sda 添加 /dev/sda3

3.接下来就贴代码了:

Fedora release 17 (Beefy Miracle)
Kernel 3.4.0-1.fc17.i686 on an i686 (0)

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 6.5G 6.0G 529M 92% /
devtmpfs 494M 0 494M 0% /dev
tmpfs 502M 0 502M 0% /dev/shm
tmpfs 502M 940K 502M 1% /run
/dev/mapper/vg-lv_root 6.5G 6.0G 529M 92% /
tmpfs 502M 0 502M 0% /sys/fs/cgroup
tmpfs 502M 0 502M 0% /media
/dev/sda1 497M 81M 392M 17% /boot

[root@localhost ~]# # fdisk /dev/sda

[root@localhost ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00002255

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 16777215 7875584 8e Linux LVM
/dev/sda3 16777216 62914559 23068672 83 Linux

Disk /dev/mapper/vg-lv_swap: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/vg-lv_root: 6979 MB, 6979321856 bytes
255 heads, 63 sectors/track, 848 cylinders, total 13631488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost ~]# pvcreate /dev/sda3
Writing physical volume data to disk "/dev/sda3"
Physical volume "/dev/sda3" successfully created

[root@localhost ~]# vgextend /dev/mapper/vg /dev/sda3 
Volume group "vg" successfully extended
[root@localhost ~]# lvextend -L +20G /dev/mapper/vg-lv_root
Extending logical volume lv_root to 26.50 GiB
Logical volume lv_root successfully resized

[root@localhost ~]# resize2fs /dev/mapper/vg-lv_root 
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/mapper/vg-lv_root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/vg-lv_root is now 6946816 blocks long.

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 27G 6.2G 21G 24% /
devtmpfs 494M 0 494M 0% /dev
tmpfs 502M 0 502M 0% /dev/shm
tmpfs 502M 956K 502M 1% /run
/dev/mapper/vg-lv_root 27G 6.2G 21G 24% /
tmpfs 502M 0 502M 0% /sys/fs/cgroup
tmpfs 502M 0 502M 0% /media
/dev/sda1 497M 81M 392M 17% /boot
[root@localhost ~]#

至此,操作结束,空间调整为30GB,满足使用需求。当然,此方案针对虚拟机中已安装的没有采用LVM的linux分区大小调整,其它不必参考此方案。

网页弹出广告,难道又被黑了–问题排查

网页弹出广告,难道又被黑了–问题排查

最讨厌网页上的弹出广告神马的,可今天打开我的网站居然右下角弹出一个大大的弹窗广告!

tanchuang
尼玛!DNS被劫持了?这是公司网络,DNS服务器我使用的是GoogleDNS,打开其它网页,正常!换firefox,IE正常,
唯独我的网站www.gigiwangs.com有弹窗,该不是又被黑了吧!为什么“又”呢?
着手排查吧:
1.检查一下首页代码,发现多了一个弹出flash广告代码。

code_1
2.登录网站后台,没有异常登录信息,关键文件最近没有被更改。
3.考虑这个代码,远端的js代码。检查index.php,head.php,footer.php都正常。
4.初步排除被黑。
5.肯定是那个插件搞鬼了,会是哪一个呢?最近没有更新或安装新的插件。
6.分析一下代码详情,发现***tianqi.php**;

code_cc
7.一下子联想到网页添加了天气预报,来自中国天气网的天气widget代码;以文本方式添加在网页的右边栏,用来显示实时天气预报,
登录中国天气,果然发现使用插件是被添加广告的^

8.至此,问题算是找到了,使用前没有仔细阅读协议,果断换用其它的服务……

[BUG]读写文件-打开正常,无法读写

[BUG]读写文件-打开正常,无法读写

问题已经描述,请思考,其实可能很深很深……

FILE *fp;
char File_Name[]="sFile_Name";
int Func( char ** args)
{
fp=fopen(File_Name,"w");
frprintf(fp,"Writing somthing.");
SubFunc_1(args);
SubFunc_2(args);
/* do sothing */
/* ......... */
}


static int SubFunc_2(char **args)
{
if ((fp = fopen(File_Name, "rb")) == NULL)
{
return -1;
/* sorry ,It is all OK. */
}
while (fgets(sBuf, sizeof(sBuf), fp) != NULL)
{
/*opps...Null...*/
}
}

来再对你的网站做一些优化吧

来再对你的网站做一些优化吧

我不是做前端的,所以对于Web设计和优化我只是通过搜索学习一点点,根据一些经验片面的记录一下我自己网站的一些优化工作,这里也分享一下。鄙视一下那些用脚趾头写代码的XX公司网页,永远使用IE6+XP老古董的古董…
我的网站使用了Wordpress+terrifico主题,之所以选用这款主题,是因为他使用了自适应的设计方式..其实不全是,需要修改一定的代码.下面将我做的工作大体描述一下,主要包括.htaccess文件优化方面,自适应网页方面。
Web_optimisation
通过Google的网页分析工具pagespeed insights,发现一些我的wordpress 网站问题:
1.图片等文件没有设置过期时间;
2.部分图片没有使用进一步的压缩;
3.首页一些非必须的css加载(移动版+PC版,进行自适应网页设计)

开工,处理!
首先,通过.htaccess设置图片的过期时间,利用浏览器缓存,节约了网站加载耗时。

......
ExpiresActive On
# RSS feed
ExpiresByType application/rss+xml "access plus 1 hour"
# Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"
# Media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"

接下来,压缩图片吧,使用Wordpress的插件 Bulk WP Smush.it,安装后启用可以自动压缩图片。却为一款优化图片的利器。
还有,该有自适应网页设计方式,更改原有的使用插件加载移动网页的方式,之前选用了WPtouch pro插件,这款插件确实在移动设备上表现不错,可在性能上只能做出取舍了,选用自适应网页设计。

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;">

这是少不了的第一步;
其次不要使用绝对的宽度,在布局上使用float,相对的定义,百分比代之。
使用相对大小的字体,图片;
还有大量的优化要做,请继续搜索……

Microsoft DreamSpark已为学生提供免费的VS2013

Microsoft DreamSpark已为学生提供免费的VS2013

如果你是一个学生,通过注册DreamSpark,可以免费下载微软提供的多种软件开发工具,参加一些活动。前提还有,你需要有一个edu邮箱或其他有效的身份验证。edu邮箱呢,当然一般学校可能会为学生提供,当然也有不提供的,尤其本科生……我们学校中国矿业大学当年为本科生提供给了cumt.edu.cn的邮箱,感谢一下…

home_sparkdream

 

目前提供的免费下载包括:
面向开发人员和设计人员工具Visual Studio Professional  以及Microsoft Visual Studio Express 系列(2010-2013),VS Team Foundation Server Express ,Expression ,Embedded Compact以及一些SDK;面向服务器和应用的Windows Server 2012,SQL server等;面向培训和认证的电子书资料。

VS2013

Visual Studio Professional  2013 已经提供下载,最近收到邮件:

成为首批升级的用户
充分利用您的 DreamSpark 会员权益。获取 Visual Studio Professional 2013。借助一组全新的出色功能,您可以创建新的现代应用程序,这些应用程序可以利用 Windows 平台创新的下一浪潮 (Windows 8.1),同时支持跨所有 Microsoft 平台的设备和服务。
Visual Studio 2013 的集成程度高于之前的任何产品。

如果需要,登录并下载。和之前版本一样,首先下载Secure Download Manager (SDM)并安装,然后下载.SDX 文件,双击下载,完成后进行安装。

down_vs

服务器日志备份的一点小问题

服务器日志备份的一点小问题

前两天一个朋友打电话聊到他遇到的问题:自己动手写的日志备份脚本有问题,当移走日志文件后,应用程序不再写日志到新的文件中,kill 掉应用后才可以..

他的脚本可能是这样的:

mv /log/a_log.trace /log_bak/a_log.trace_xyz 
touch  /log/a_log.trace

相信各位大拿肯定已经知道原因,但是我还在这里说说,为那些可能想知道原因的小童鞋。

 

那么,弄清楚open函数或者sys_open系统调用,知道文件描述符,即使你没有写过C代码,也知道原因了吧!

文件已经被你mv走了,可以原应用还在运行,仍旧保留着原文件的文件描述符,可是文件其实已经不存在了…

解决办法:不要删除或者移走日志文件,清空这个文件就可以了!

cp -p /log/a_log.trace /log_bak/a_log.trace_xyz 
cp /dev/null /log/a_log.trace

再来深入一下吧:

什么是虚拟文件系统?

    VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。在其下是实体的文件系统。虚拟文件系统的主要功用,在于让上层的软件,能够用单一的方式,来跟底层不同的文件系统沟通。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,让操作系统能够很快的支持新的文件系统。

一切皆是文件!

  一组在逻辑上具有完整意义的信息项的系列。除了普通文件,其他诸如目录、设备、套接字等 也以文件被对待。总之,“一切皆文件”。

文件对象

文件对象是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的对应关系。它由sys_open() 现场创建,由sys_close()销毁。文件对象和物理文件的关系有点像进程和程序的关系一样。当我们站在用户空间来看 待VFS,我们像是只需与文件对象打交道,而无须关心超级块,索引节点或目录项。因为多个进程可以同时打开和操作 同一个文件,所以同一个文件也可能存在多个对应的文件对象。文件对象仅仅在进程观点上代表已经打开的文件,它 反过来指向目录项对象(反过来指向索引节点)。一个文件对应的文件对象可能不是惟一的,但是其对应的索引节点和 目录项对象无疑是惟一的。

 struct file {
    ……
    struct list_head        f_list;        /*文件对象链表*/
    struct dentry          *f_dentry;       /*相关目录项对象*/
    struct vfsmount        *f_vfsmnt;       /*相关的安装文件系统*/
    struct file_operations  *f_op;           /*文件操作表*/
    ……
};

文件I/O

sys_open()系统调用打开或创建一个文件,成功返回该文件的文件描述符。sys_read()系统调用用于从已打开的文件读取数据。如read成功,则返回读到的字节数。如已到达文件的尾端,则返回0。

sys_open

 

更多,请再进一步探索..

AIX db2嵌入式SQL(sqc)编译

AIX db2嵌入式SQL(sqc)编译

编译SQC

使用C语言编写嵌入式SQL以访问DB2的程序,DB2预编译器可以将SQL语法直接转换为DB2行时服务应用程序编程接口(API)调用。

bind的主要作用是根据SQC中的SQL语句使用的表和操作指定访问时DB要使用的策略,是一种优化作用,以加快数据访问的速度。

aix_sqc 编译

 

预编译命令:

db2 prep *.sqc bindfile

bindfile参数作用是生成和sqc文件同名的.bnd文件。

接下来就和一般的C程序一样进行编译了,来看看这个简单的Makefile,AIX 编译64位的应用。

CHMOD =chmod 755
RM =rm -f
#export OBJECT_MODE=64
DB2_HOME=/opt/IBM/db2/V9.1
CFLAGS=  -q64 -qchars=signed -I.  -g -I$(DB2_HOME)/include
LDFLAGS = -b64 -g -L $(DB2_HOME)/lib64 -ldb2
DB2 =db2
BINHOME=$(HOME)/batch/bin

CC= xlc_r

#DB CONFIGURE
DBNAME = db2name
USEID = db2user
PASWD = db2pswd

ALL =$(BINHOME)/ApsBatchWS
all:$(ALL)
.SUFFIXES:
.SUFFIXES:.sqc .cpp .c .o
OBJS = dbcons.o serv.o util.o log.o flow.o

.sqc.o:
        $(DB2)  connect to $(DBNAME) user $(USEID) using $(PASWD)
        @$(RM)   *.bnd $*.c
        @$(DB2)  prep $< bindfile
        @$(DB2)  bind $*.bnd
        @$(DB2)  connect reset
        @$(DB2)  terminate
        @$(CC)  $(CFLAGS) -s -c  $*.c
.c.o:
        $(CC) -c $(CFLAGS)  $<
.cpp.o:
        $(CC) -c  $(CFLAGS)  $<

$(ALL) : $(OBJS)
        $(CC) $(CFLAGS)  $(OBJS) $(LDFLAGS) -o  $@
        $(CHMOD)  $@

clean:
        $(RM) *.o dbcon.c dbcons.bnd $(ALL)

看这里还有好多的例子:点击这里查看

sqc的编写方法这里就不再赘述,相关的文章已经太多了。

 

阻止电脑休眠程序

阻止电脑休眠程序

这个软件,无论功能和界面看起来好傻..是吧?

多年前写的一个PC上软件,阻止电脑休眠,进入屏幕保护的方法有N+种,为什么需要这个蛋疼呢?

黑先生曾经说过:All that is real is rational; and all that is rational is real.那么这个存在也是存在蛋疼的理由的。那些年的回忆啊…

那是在一个庞大的公司,上上下下全是人,有木有?公司电脑可都是加入域,你没有管理员权限,就是说,你仅有运行已安装在上面的若干软件的权限,而没有更改任何配置的权限,当然也包括了更改屏幕保护。于是你一个转身,电脑进入屏幕保护,你不不得再输入密码…

理由也算充分了,在某些地方他并非一无是处。除了阻止电脑休眠,而且可以在下班后自动为你关闭电脑,假如你决定翘班……这就是当年的生活…

shots

 

今天,偶然翻看google drive,看到了这个小工具,居然还可以运行,多年前辛辛苦苦学习VC++,MFC,到现在代码居然看不懂…

时光是把杀猪刀……

BOOL CAnti_SleepDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	SetWindowText("阻止屏保开启/计算机休眠");
	long val=GetWindowLong(this->GetSafeHwnd(),GWL_STYLE);   
	val|= WS_SYSMENU; //需要系统菜单
	SetWindowLong(this->GetSafeHwnd(),GWL_STYLE,val);
	m_brush.CreateSolidBrush(RGB(0,0,255));
	//ModifyStyle(0,WS_SYSMENU,0);

	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;	
		strAboutMenu.LoadString(IDS_ABOUTBOX);

		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_STRING, IDM_MINIWND, "隐藏到托盘");
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,"关于.." );			
		}
		pSysMenu->RemoveMenu(0,MF_BYPOSITION);
		//pSysMenu->RemoveMenu(1,MF_BYPOSITION);
		pSysMenu->RemoveMenu(2,MF_BYPOSITION);
		pSysMenu->RemoveMenu(3,MF_BYPOSITION);
		pSysMenu->RemoveMenu(SC_SIZE,MF_BYCOMMAND);
		pSysMenu->RemoveMenu(SC_MAXIMIZE,MF_BYCOMMAND);
	}
	GetDlgItem(IDC_WORKSTATIC)->ShowWindow(FALSE);
	quitBBT.AutoLoad(IDCANCEL,this);
	quitBBT.LoadBitmaps(IDB_BITMAP3);
	shutBBT.AutoLoad(ID_TIMESHUTDOWN,this);
	shutBBT.LoadBitmaps(IDB_SHUTDOWNBMP);
	hideBBT.AutoLoad(ID_TOTRAY,this);
	hideBBT.LoadBitmaps(IDB_BITMAP2);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

祭奠一下…放在了Github上..但愿还有用武之地……
Git:  https://github.com/iocoo/Anti_Sleep.git