Linux服务器有两个网卡,配置eth0为公网使用,eth1为内网使用。

分别为两个网卡配置IP地址,DNS,网关等。重启生效后,发现无法访问公网,ping网关也能ping通,ping同一个网关下的其他公网地址也能ping通。

1> 刚开始ping的时使用域名,怀疑是DNS无法解析,遂直接ping IP地址,同样无法ping,排除与DNS的关系。

2> 由于能够ping同一个网关下的IP地址,所以服务器网卡等肯定没有问题。应该还是网卡配置导致。

3> 后来仔细检查eth0和eth1的配置,发现配置了两个网关。其中eth1配置了内网的网关,修改eht1的网关与eth0一致后,问题解决。

上述问题还是比较容易犯,配置网卡的时候通常都是和别的环境对照着配,稍不注意,就会配置多个网关。

来自:http://www.linuxidc.com/Linux/2011-03/32955.htm
规划产品于做项目:
有产品规划意识也不一定就能做出产品,特别是当我们试图从项目来驱动和衍生产品的时候,我们把项目个性化的内容误认为是产品通用化的内容,由于项目本身的短平快本身就无法形成一个通用化的产品底层模型,同时项目研发和产品研发本身又不分家,最后发现还是在做项目。


很多时候我们根本不会考虑产品规划的事情,因为我们是在做项目,客户项目化定制理所当然,那如果抱着这种思想项目始终无法转会为产品,没有产品自然无法产生应该有的产品化后的规模效应。项目型IT企业最后完全演变为IT外包企业,更谈不上企业的核心竞争力。

有产品规划意识也不一定就能做出产品,特别是当我们试图从项目来驱动和衍生产品的时候,我们把项目个性化的内容误认为是产品通用化的内容,由于项目本身的短平快本身就无法形成一个通用化的产品底层模型,同时项目研发和产品研发本身又不分家,最后发现还是在做项目。

产品规划真正要做的就是产品和项目本身的分离,产品变化为一个平台,项目变化为产品基础上的配置和实施。实施本身存在差异,但是产品平台本身可以产生强大的规模效应和底层支撑。IT企业核心竞争力最终还是体现在产品上,产品是企业核心研发能力和价值的重要体现。对于如何进行产品规划,针对IT企业而言从如下几个方面来进行说明。

背景分析和现状调研

市场驱动研发,当你无法像苹果一样引领市场的还是很,那就更好的去满足市场的需求。既然是规划,那么很多时候考虑的则是不是满足现有需求,而是要去挖掘潜在的市场需求。

背景分析重点是你规划的产品方向相关的业界标准,市场发展趋势,产品所涉及到的新技术的发展趋势等。而现状调研则是当前市场现状,现状分析越清楚越容易后续的定位和差异化。同时现状分析还不包括了我们自身的现状,包括已有的研发产品,已经涉及到的相关项目,团队人员情况等。任何规划要能落地就一定不能脱离实际。

理解市场很困难,因为市场无时无刻不在变化,很多时候需要的是要在合适的时候推出合适的产品。产品本身依托太多的外在环境,IT基础设施的发展等,太超前了是死,完全跟随也没有出路。则是必须面对的一个问题,也是产品规划不可避免的风险。但是你不能回避,没有理解清楚市场,就谈不上细分市场,产品定位和差异化等。正如我们自己,没有清楚的认识自己,就谈不上定位自己和规划自己。

产品定位分析

产品规划的核心在市场营销方法论,而市场营销核心本身又在STP(细分,目标和定位),简单来说核心在于差异化。通过差异化充分的扬长避短,发挥自己的优势。

当我们谈产品的定位的时候,又必须进一步的细化客户的需求,从客户来说我们有哪些客户和客户群,他们是如何划分的?从需求来说有哪些需求和功能要求,其各自的优先级又是如何的。市场驱动研发,从4P到4C,进一步的体现产品最大的成功就是市场销售量,要达到该目标那产品必须实现客户价值,客户价值即时产品价值。

市场和客户想清楚了,那接下来就是匹配的事情,我们的能力必须要匹配需求和能够实现需求,必须要清楚的认识到我们已有的优势和劣势,我们面对哪些竞争。SWOT看着很简单,但是真正分析到位确很困难的,因为很多时候很多是主观分析,很难有完整的数据来做支撑。蓝海里面讲价值创新,那前提是首先通过SWOT分析明确自身的差异化核心价值体现在哪里?这样才能剔除传统和不增值内容,加入新技术和创新点。

产品定位输出包括两个重要方面,一个是做什么产品,或者说做该产品的里面的那一个更加具体的类型,该产品的核心功能必须有哪些?另外一个即是产品的目标市场或客户是谁,目标客户是否足够细分? 很多时候我们老想做一款通吃的产品,到后面导致产品大量的定制和膨胀,最终产品又变成了定制项目。

产品总体规划

切合前面的市场分析和产品定位,那么我们产品规划目标和产品发展愿景是什么?产品愿景将进一步回答产品的核心价值所在。产品愿景是我们期望产品是什么样子,遵循一个什么样的发展路线,解决哪些客户的核心问题以体现核心价值。产品愿景可以看得更加长远点,超过3年或者更长时间,虽然存在太多的不确定性,但是我们仍然要有一个清晰的愿景。正如你想把你的孩子培养成什么样一个人一样,必须有一个大方向和愿景。

产品愿景和大方向清楚了,接下来才是分阶段的规划,或者叫路标规划,路标规划让我们对一个长时间周期的规划有了一个更加清楚的里程碑,这是产品规划内容最粗粒度的一个落地考虑。有了路标,我们的航线更加清晰,要达到最终的大目标我们就必须一个个小路标一步步的走过来。

路标规划是一个长时间周期规划,3-5年甚至更长时间,那这个想清楚了接下来就要考虑最近1-2年如何做?最近3-6个月如何做?这一步需要更加详细的规划,以方便实施和落地。在现在互联网时代,产品研发也必须敏捷,短周期迭代,以应对变化和进行调整。

一个是如何做和做哪些?那么另外一个重要的就是如何推和如何实施?我们在做之前相关的市场规划策划,产品方案等工作就必须开始和并行。产品研发和市场工作并行,而不是等产品真正出来了才考虑如何推广。

产品研发规划

研发规划离我们就很近了,首先研发规划的输入应该是产品规划或产品年度规划,产品年度规划的内容需要通过产品研发规划落地。研发规划可以理解成大的项目计划,那自然应该包括项目范围和需求收集,需求分析和优先级的评估,研发资源的投入和成本,研发功能点,研发进度计划。如果存在多个子产品,还必须考虑研发产品组合规划,然后才是子产品的研发计划。

研发计划需要进一步细化到短周期的产品研发项目和版本,每一个版本有明确的项目范围和交付功能,有明确的资源申请和资源拖入,研发的每个版本最终通过立项后要严格按项目管理的方式进行计划,执行和跟踪。

研发规划里面另外一个重点就是技术规划,很多时候我们的研发规划和技术规划是放在一起的,但是不同的产品研发往往是涉及到相同的技术和平台。那么这部分应该抽取出来,根据产品开发方法论,本身也是包括了产品,平台和技术三个层面的内容。平台层和技术层如果足够强大,那么产品本身的灵活和可配置性也越强。

资源管理和管道管理在产品组合管理里面是一个重要内容,在研发规划里面一定要考虑到对资源的需求,特别是涉及到多产品规划的时候,资源冲突往往是一个很头疼的事情。而研发资源往往又不适合在同一时间兼顾多个产品或项目。资源规划本身包括了对资源技能的要求,时间的要求和数量的要求。这些都需要提前考虑到。

产品财务规划

产品财务规划是产品战略规划和商业模式中盈利模式分析和规划内容的进一步落地。财务规划必须回答问题是产品投入多大,需要多少成本?后续盈利模式如何,需要多久能够开始盈利。是否有进一步的可持续的盈利模式,还有哪些增值点,这些都必须考虑到。

资源一定要分阶段投入,产品也最好能够分迭代版本逐步退出。要知道产品研发周期越长,那么成本投入越大,企业本身的现金流压力也就越大。公司做产品规划,做产品的目的只有一个就是合法的赚取最大化的利润。这是很正常的一个事情,一方面是回报员工和股东,一方面是公司可持续长久发展。

产品财务规划首先是产品的投资回收期和内部收益率分析,其次是产品投入预算,预算的进一步分解等。有预算后续有执行,就容易进一步的按产品核算成本和收益。对于产品推出市场,又必须考虑产品的定价策略,产品定价策略需要考虑市场本身成熟度,客户关系积累,产品本身的发展多方面信息进行完善。

摘自:http://blog.sina.com.cn/s/blog_493a84550100z0n5.html
背景:前两天搞那个笔记本光驱位启动偶尔出现启动不对,给试着做了一个U盘作为启动盘后,发现插入后,只有8M。

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>diskpart

Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: USER-2S1CISV9DB

DISKPART> list disk

  磁盘 ###  状态           大小     可用     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  磁盘 0    联机              119 GB     8 MB
  磁盘 1    联机              465 GB  1024 KB
  磁盘 2    联机             3840 MB    64 KB

DISKPART> select disk 2

磁盘 2 现在是所选磁盘。

DISKPART> clean

DiskPart 成功地清除了磁盘。

DISKPART>


第二步,不能直接在盘符上点格式化,是格式化不了的。
右击计算机,选择管理,进入磁盘管理,能看到u盘分区是未分配(黑色),右击,新建分区,后格式化,一直下一步就OK了。

参考:http://wenku.baidu.com/link?url=GdwdGJFfmxY-cWkAjf0nuUMxehOILyFnc20iwmUNtsF-FIG_WttKC4BSiiC1FKAx2ls9P3DoXJ1pME7VOyhr4_arATMkqMdCuL0wMv3bZLW
摘自:http://jingyan.baidu.com/article/b24f6c82dddece86bee5da67.html

设置一下吐核,按Swoole官方的Wiki教程,设置一下吐核,From: https://wiki.swoole.com/wiki/page/10.html :
一、开启CoreDump:
ulimit -c   #查看
#ulimit -c unlimited
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径


二、设置内核参数将吐的核放到指定目录下指定格式存放:
kernel.core_pattern = /data/core_files/core-%e-%p-%t
通过ulimit -c命令查看当前coredump文件的限制
ulimit -c
打开core dump
ulimit -c unlimited

三、调试:
#gdb /usr/bin/httpd core.123
gdb /usr/local/nginx/sbin/nginx core.456

四、在GDB里使用bt命令调试等:
在gdb下输入bt查看调用栈信息

(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0  0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)  
    at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92                              serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段

(gdb)f 1
(gdb)f 0

五、像这种退出不是段错误,没有Coredump的:
==> /data/logs/nginx/error.log <==

2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41237 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41237 exited with fatal code 2 and cannot be respawned
2017/08/16 11:56:52 [notice] 41234#0: signal 29 (SIGIO) received
2017/08/16 11:56:52 [emerg] 41236#0: load ip map file error: /usr/local/nginx/conf/ip.map

2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41236 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41236 exited with fatal code 2 and cannot be respawned
原因是:一个文件不存在,故意移动了下:
mv /usr/local/nginx/conf/ip.map /usr/local/nginx/conf/ip.map.bak
===================================================================================
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径
gdb php core
gdb php /tmp/core.4596
在gdb下输入bt查看调用栈信息
(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0  0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)  
    at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92                              serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段
(gdb)f 1
(gdb)f 0


对gdb下f命令的实践,能显示哪一行出了问题:
(gdb) bt
#0  0x00007ffff7b01980 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007ffff7a924a0 in _IO_new_file_underflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at fileops.c:612
#2  0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
#3  0x00007ffff7a753b3 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffe368, errp=errp@entry=0x0) at vfscanf.c:600
#4  0x00007ffff7a83a19 in __isoc99_scanf (format=<optimized out>) at isoc99_scanf.c:37
#5  0x00000000004006d4 in creat () at nodedemo.c:24
#6  0x000000000040075b in main () at nodedemo.c:46
(gdb) f 5
#5  0x00000000004006d4 in creat () at nodedemo.c:24
24          }
(gdb) f 2
#2  0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
436       int ch = _IO_UNDERFLOW (fp);


如果为0,需要修改/etc/security/limits.conf,进行limit设置。
开启core-dump后,一旦程序发生异常,会将进程导出到文件。对于调查程序问题有很大的帮助
来自:http://wiki.swoole.com/wiki/page/10.html http://wiki.swoole.com/wiki/page/11.html
—————————————————————————————————————————————

记录一下。
1. ulimit -S -c unlimited
2. 在apache主配置文件中增加一行:CoreDumpDirectory /var/apache_coredump #目录随意
3. chown修改/var/apache_coredump的权限为apache子进程可写

注意:不要开启太久,core文件太多。占用太多磁盘空间
调试
gdb /usr/bin/httpd core.123
apache的coredump

来自:http://5iwww.blog.51cto.com/856039/761077
阅读全文
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。
一、看一个简单的例子(学习其用static字符串数组和指针的返回判断这块值得学习并记住):


二、分为header和包体数据两个回调指针:




整个代码如下:

From:
http://www.ithao123.cn/content-1085192.html

curl连接超时的问题:
CURLOPT_TIMEOUT  设置cURL允许执行的最长秒数。  
CURLOPT_TIMEOUT_MS  设置cURL允许执行的最长毫秒数。
CURLOPT_CONNECTTIMEOUT  在发起连接前等待的时间,如果设置为0,则无限等待。  
CURLOPT_CONNECTTIMEOUT_MS  尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

CURLOPT_CONNECTTIMEOUT 与 CURLOPT_CONNECTTIMEOUT_MS 类似,可以理解成等待连接成功创建的时间.
来自:http://blog.chinaunix.net/uid-2270658-id-302245.html
超时这一块还应该注意在不同的curl里存在毫秒,而上线后可能curl版本较低不支持毫秒,于是出现没有发出请求的问题:
来自:http://www.vimer.cn/2012/01/%E5%85%B3%E4%BA%8Elibcurl%E4%B8%8D%E5%8F%91%E5%8C%85%E7%9A%84bug%E5%AE%9A%E4%BD%8D.html

使用libcurl库可以实现HTTP和FTP的请求,以前对http协议进行过学习,但一直无法很好的解决阻塞问题,认识了libcurl后方觉相见恨晚,因为http阻塞的问题已经困扰了我两年了。
虽然编译出来的libcurl.lib足有700多K,但libcurl库的使用却很简单,只有熟悉curl_easy_setopt这个函数就可以了。该函数的作用是设置请求的相关参数来让curl构造协议头或返回指定的数据。
//返回HTTP协议头
curl_easy_setopt( curl, CURLOPT_HEADER, 1 );
//超时设置(单位:秒),如果在指定时间内没数据可接收则超时
curl_easy_setopt( curl, CURLOPT_TIMEOUT, 3 );
//连接超时,不过只适用于Unix系统,Windows系统应该就是使用CURLOPT_TIMEOUT
curl_easy_setopt( curl, CONNECTTIMEOUT, 3 );
//设置请求Cookie
curl_easy_setopt( curl, CURLOPT_COOKIE, cookie );
//返回Cookie
curl_easy_setopt( curl, CURLOPT_COOKIEJAR, cookie );

来自:http://blog.chinaunix.net/uid-2270658-id-247815.html
阅读全文
背景:以为微信用的是websocket,试一下想抓包看下。
现在做网页游戏开发的同学,肯定会使用到WebSocket来通讯,毕竟相对于长轮询和iFrame等方式,WebSocket给我们开了一扇大门,更简单快捷。

首先,HTTP是建立在TCP协议基础上的,而WebSocket通常也是建立在TCP上,所以说为什么有些网页游戏抓不到包而有些又可以,这仅是因为你使用的抓包工具是针对了HTTP的通信协议。

我先从抽象的层面,举一个可能不太恰当的例子,只为了让不明白HTTP和WebSocket两者之间抓包有何区别的同学大概了解这两个协议的异同。客户端/服务端用C/S简称,我把数据抽象成水流,而HTTP是用水枪传递水流的(无状态),至于WEBSOCKET则是使用水管传递水流(实时)。

HTTP通讯方式:

客户端C把数据封装好了要交给服务端S,所以把水放到水枪里面,射过去给S
S用桶把水挡下来了,然后分析水的成分(数据内容),完成后再把新的水(返回的数据)射回去给C
这个过程中,任何人都可以随时在C和S之间用海绵吸一点水然后拿去分析(嗅探数据),或者是直接用桶把水都挡下来分析完后再装到水枪中,模仿C的动作射给S(也就是代理抓包)
WEBSOCKET方式:

客户端C和服务端S,双方之间先用一条水管连起来(用的是HTTP握手),然后水流都通过这个小水管来传输
水管里面一直有水在流动,所以要通讯只需要C或者是S把数据水流放到水管中,则会立刻传输到对方那边
这个过程中,要嗅探就比较麻烦了,需要先在水管中先打个洞,然后再把分析器放进去、或者是斩断这个水管在中间接个水表之类的设备去分析水质成分
好了,乱说一通完毕,说一下抓取WebSocket的两个工具,都是常见的程序,只是可能很多同学不清楚有这样的功能而已。

第一个:Chrome,也就是谷歌的浏览器

进入你要抓包的网页,然后按F12打开我们最爱的开发者工具
然后点Network,再从过滤器中找到WebSockets(上方或下方的状态栏)
选中过滤出来的WebSocket,在弹出来的右边栏中可以找到Frames,里面就是抓到的包
如果要看新通讯产生的数据包,则要先点其他的位置比如Headers再点Frames才可以刷新
第二个:Fiddler,抓包调试的利器,已经人手一个了吧

打开Fiddler,点开菜单栏的Rules,选择Customize Rules...
这时会打开CustomRules.js文件,在class Handlers中加入以下代码
static function OnWebSocketMessage(oMsg: WebSocketMessage) {
    // Log Message to the LOG tab
    FiddlerApplication.Log.LogString(oMsg.ToString());
}
保存后就可以在Fiddler右边栏的Log标签里,看到WebSocket的数据包
到了这里,还有一个情况要说明,就算是有工具可以抓到WebSocket中的包,看到的也不一定是明文。这个要看传输的水是什么,如果是普通水那谁都可以分析;但如果是水银,那这个分析水的设备很可能就显示乱码了。 所以也就有同学明明使用了可以抓WebSocket包的程序,却抓出来的是乱码。那是因为别人传输的是二进制数据流(比如AMF包),而不是JSON之类的对人类可读的明文。

参考资料:

Debug Inspect WebSocket traffic with Fiddler 【荐】

Logging WebSocket Frames using Chrome Developer Tools, Net-internals and Wireshark
原始链接: http://blog.jtwo.me/post/use-chrome-or-fiddler-sniffer-websocket
背景:最新的apr-1.5.1.tar.gz,configure时出现cannot remove `libtoolT’: No such file or directory。
在configure里面RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面 ... 时apr报错解决rm: cannot remove `libtoolT': No such file or directory.
解决办法:42432     $RM "$cfgfile"  删除掉。也可以修改下:
在configure里面 RM='$RM  -f'   这里的$RM后面一定有一个空格。 如果后面没有空格,直接连接减号,就依然会报错。把RM='$RM'改为RM='$RM  -f'
注意,此文件下载到本地修改在上传会报错。建议用VI修改,来处:http://blog.csdn.net/a673341766/article/details/9078011
————————————————————————————————————————————————
在源码编译的apr./configure时,出现问题,具体详细信息如下:

OS:Centos 5.6 32bit

Apr Version:1.4.8

报错信息如下:

error info:rm: cannot remove `libtoolT': No such file or directory

解决方法如下:

打开configure文件

找到30055(不同的版本可能位置不一样)

将这行代码注释掉

# $RM "$cfgfile"

然后重新编译,问题可以解决

来自:http://sxhxt.blog.51cto.com/5126000/1301432
==========================================================================
安装成功参考URL,Linux下源码安装Subversion及Apache:
http://blog.csdn.net/tcpipstack/article/details/8680706
Apache 安装一定要加参数:--enable-dav --enable-so参数:

上面的模块都是双小中间短横,不是一个,是两个,前几次编译都给搞一个,没编译出来这个svn的动态so。
总结:出现这种情况有可能三种情况:
1)rpm包不全。
2)rpm包32位和64位混用。
3)可能给CFLAGS加上不同的参数了,在启动时就加上了,如方便编译arm,得清掉这样的影响。
————————————————————————————————————————————————————————————
背景:今天安装http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz 的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos:  yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
居然编译也依旧出现:
configure:4912: error: in `/data/software/subversion_Apache_SoftAll/apr-1.5.1':
configure:4915: error: C compiler cannot create executables
于是看了下:apr-1.5.1/config.log
configure:4864: gcc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w   conftest.c  >&5
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: error: unrecognized command line option "-mfpu=vfp"
这个玩意,想起来了,是编译树莓派时给在/root/.bashrc里加上的:
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
于是去了,去了还一样,还不行,明白了,去了以前影响还在,得:export CFLAGS="",于是好了。
一搜网上,N年前我的博文里也描述过类似的问题,但那是由于32位和64位不同的rpm包引起的:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1976088
我本来想升级gcc的,升级还是不行,于是自己写个简单的测试下,就发现了,如下:
试写一个:
#include <stdio.h>
int main(){
printf("Helo,World");
return 1;
}

make helo
cc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w    helo.c   -o helo
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: 错误:无法识别的命令行选项“-mfpu=vfp”
cc1: 错误:无法识别的命令行选项“-mfloat-abi=hard”
helo.c:1: 错误:-mtune=switch所带参数(arm1176jzf-s)不正确
make: *** [helo] 错误 1

想起来了:做树莓派时给加了新的参数:
获得ARM GCC 交叉编译器
cd work/raspberry
git clone git://github.com/raspberrypi/tools.git
  这里官网下载可能比较慢,可以到我的资源下载 为 bcm2708hardfp编译器,和官方一样的
   http://download.csdn.net/detail/canyue102/6725615
安装该编译器,把编译器路径加入到环境变量中:
gedit ~/.bashrc
在最后一行添加:
export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
在终端执行:
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"

上面加export来自:http://www.csdn123.com/html/technology/2013/20131218/3796.htm
/gcc-build-4.8.0# vi ~/.bashrc
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"

——————————————————————————————————————————————————————————
开始摘录:
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html

http://blog.csdn.net/magicyang87/article/details/7972169



1.下载源码包
wget http: //ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
解压: tar -jxvf  gcc-4.8.0.tar.bz2

2.下载编译所需依赖库
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..

3.建立编译输出目录
mkdir gcc-build-4.8.0

4.进入此目录,执行以下命令,生成makefile文件
cd  gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

5.编译
make -j4
如果编译成功,则时间是比较长的,半个小时左右,所以如果你看它一直在输出没有立刻停下来,应该很开心!

6.安装
sudo make install

7.切换GCC到新版
确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下
ls /usr/local/bin | grep gcc
添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40

8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!


看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
=================万恶的分割线===========================
首先是参考我们伟大的头儿的博客, http://blog.csdn.net/yanxiangtianji/article/details/8365630。

坑一、libstdc++-static

他这过程也是参考各种博客集成而来,因为我网上看大部分第一步都是: yum install glibc-static libstdc++-static -y
可其实centos的源上根本没有 libstdc++-static,第一个是有的,请安装。
坑爹的是,按照教程进行到编译make 之后,查看目录下的config.log 文件 ,搜索err,果然报 static- libstdc++的错!
这下我可认真了,死都要把 libstdc++-static装上。
首先,换centos的源,换了163的源(http://www.cnblogs.com/peterpanzsy/archive/2013/04/07/3003387.html),不行,后来跑oschina上提问,大神说epel源上应该有,于是换epel的源,仍然屁都没有!
于是去下rpm包,centos的软件包又不多,只能去下fedora的,一个家族的可以一试,epel源两者也通用的。
rpm -ivh xxx.rpm
结果出现依赖问题,于是下了这么一堆:
可是安装第一个的时候又跟系统自带的4.4.6版本的冲突,尼玛的,yum remove又因为依赖关系不可行,总不能卸载自带的gcc 4.4.7吧,后面编译新的gcc还要靠它呢,不能冲动。
今天上午就是乱搞,搞到报kernel的错,下午花了一个小时重装的系统。
还有一个原因,大神误以为他当年6.3的centos是成功yum装上了 libstdc++-static,于是我顺道重装的时候换成了centos6.3的版本,开始是6.4的其实。
最后发现6.3的源上也没有这个神奇的东西。
于是对安装 libstdc++-static绝望了。。。放弃。

坑二、三个依赖库是否要手动编译安装的问题。

进入gcc目录,执行:

./contrib/download_prerequisites

下正确版本的载那三个依赖的库。

大神说:可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):
cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译gcc,直接报两个error停掉了,然后就出现第一步搜到的 libstdc++-static错误。

后来跳过手动装gmd  mpfr mpc之后,才执行了编译成功了。。。

坑三、共享库路径的问题

因为大神那篇博客里说以上的三个共享库不在系统默认路径下。
我们可以搜一下:locate mpc|grep so
   确实有/usr/local/lib/libmpc.so
可是当我在 /etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。


我是真心不知道大神那个是怎么会那么复杂的。。

来自:http://blog.csdn.net/dyllove98/article/details/8917485
实践情况:
/gcc-4.8.0# ./contrib/download_prerequisites
cd ..
mkdir gcc-build-4.8.0
cd  gcc-build-4.8.0
configure: error: in `/data/software/subversion_Apache_SoftAll/gcc-build-4.8.0':
configure: error: C compiler cannot create executables
See `config.log' for more details.


——————————————————不是这个问题,老老实实的安吧遇到确啥加上---------------------------

安装步骤原始来源:http://blog.csdn.net/tcpipstack/article/details/8680706
最新下载地址:
http://downloads.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2F&ts=1415418215&use_mirror=jaist
http://www.openssl.org/source/openssl-1.0.1j.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz

解决 configure: error: C compiler cannot create executables
2014年03月17日 ⁄ Linux ⁄ 共 241字 ⁄ 暂无评论 ⁄ 被围观 2,049 views+

今天安装memcached的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:

yum install glibc-*
还是不OK:
entos:  yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
——————————————————————————————————————————————————————————
安装APR
Apr & apr-util的下载地址:http://apr.apache.org/download.cgi
[plain] view plaincopy
    cd apr-1.4.6  
    //  
    ./buidconf  
    //  
    ./configure -h  
    //  
    ./configure --prefix=/usr/local/apr/  
编译和Install
[plain] view plaincopy
    make  
    make install  
configure时出现rm: cannot remove `libtoolT': No such file or directory问题解决办法:https://jackxiang.com/post/7619/

安装APR-UTIL
下载地址:http://www.fayea.com/apache-mirror//apr/apr-util-1.5.1.tar.bz2
安装步骤:
[plain] view plaincopy
    cd apr-util-1.5.1  
    ./buildconf  
    ./configure --prefix=/usr/local/apr-util/  
    ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr  
     make  
     make install  
安装OpenSSL
下载OpenSSL,地址是http://www.openssl.org/source/openssl-1.0.1d.tar.gz
安装过程:
[plain] view plaincopy
    #tar -xvf openssl-1.0.1d.tar.gz  
    #cd openssl-1.0.1d  
    #./config --prefix=/usr/local --openssldir=/usr/local/openssl  
    #make  
    #make test  
    #make install  
安装PCRE
下载pare,地址:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.gz
解压之后安装:
[plain] view plaincopy
    cd pcre-8.32  
    ./configure -h  
    ./configure --prefix=/usr/local/pcre  
    make  
    make install  
继续安装Apache HTTP Server,./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre,这个问题就解决了:
[plain] view plaincopy
    ./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/  
注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会报告给用户。但可以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错误。

serf 这个库提供的是对http和https协议的支持。值得说明的是,1.8版本之前这里依赖的是neon,1.8之后改成了serf。这里用的是serf-1.2.1

编译:./configure --prefix=/usr/local/serf --with-apr-util=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status

yum install expat
rpm -ql expat-2.0.1-11.el6_2.x86_64
/lib64/libexpat.so.1
/lib64/libexpat.so.1.5.2

vi /etc/ld.so.conf
/lib64/
这两行有用然后:
yum install expat
yum install expat-devel
./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install

安装subversion:
http://pkgs.fedoraproject.org/repo/pkgs/libserf/serf-1.3.4.tar.bz2/9820da2c46ee10773309f0de657cddfd/
serf-1.3.4.tar.bz2  放到那个subversion源码的temp目录下后:
root@119.10.6.23:/data/software/subversion_Apache_SoftAll/subversion-1.8.10# ./get-deps.sh
Local directory 'zlib' already exists; the downloaded copy won't be used
Local directory 'sqlite-amalgamation' already exists; the downloaded copy won't be used
Local directory 'apr' already exists; the downloaded copy won't be used
Local directory 'apr-util' already exists; the downloaded copy won't be used

./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib \
--with-openssl --enable-maintainer-mode --with-serf=/usr/local/serf --enable-mod-activation

make && make install

检查svn是否支持http方式:
svn --version
配置svn请参考:http://blog.linuxeye.com/95.html
参考:
http://subversion.apache.org/docs/release-notes/1.8.html
http://code.google.com/p/serf/

1)建立版本库(Repository),配置subversion和http的关系:
mkdir -p /data/subversion/repositories
chown -R www:www /data/subversion/repositories

2)如果版本库的增改次数很频繁,可以写一个简单的脚本来实现快速调用:

3)接下来就是apache的配置了,这里要保证两个模块都已经正确放到模块目录中,检查是否安装成功看有没有加入下面两行:
安装成功会在/usr/local/apache2/conf/httpd.conf自己加入下面2行
LoadModule dav_svn_module     /usr/local/subversion/libexec/mod_dav_svn.so
LoadModule authz_svn_module   /usr/local/subversion/libexec/mod_authz_svn.so

4)Httpd下的svn扩展配置文件如下:
httpd.conf


5)配置文件里的文件:
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.grp
admin: chluo jackxiang builder oscarzhu samonma yongwang bluexchen samliang phillipzhang dalazheng jasoncao ianzhang harry sally
ozzyad: marvin richard mandy ben amy vincent sam gary adam
ssd: kary
jgys_sz: zh_jgys lhq_jgys
haoyang: haoyang
mihekeji: mihekeji

cat  /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.pwd
sally:Y.FJC2U7MqJOU
harry:udpIl6wCO.LuI
jackxiang:cCkclYr9pb98o

6)启动: /usr/local/apache2/bin/apachectl start
启动apache出现undefined symbol: dav_register_provider错误:
从网上找了原因,是因为编译apache的时候没有加上
--enable-dav --enable-so参数
是因为--enable-dav 启用davweb支持,是subversion+apache组合必选,缺少的话,在运行apache会出现undefined symbol: dav_register_provider的错误
重新编译了一遍,OK了。摘自:http://blog.sina.com.cn/s/blog_5d15305b0101cn6q.html
还不行:
解决方法:
svn安装在 /usr/local/subversion,检查/usr/local/subversion/modules,里面已包含mod_authz_svn.so 与 mod_dav_svn.so。
要将他们复制或链接到apache的modules目录中才可以。

以前在自己的Vmware下面配置成功过,上面这些是在自己的那个vps上配置,以前配置成功的链接,特别是关于https这块的配置,得参考:
https://jackxiang.com/post/4229/
背景:用那个chrome浏览器访问自己的博客,出现正在下载代理脚本,较慢。
解决办法:
前这个有问题有困扰到我,Chrome的启动速度大家都是非常清楚的!基本上算是秒开吧!但是今天左下角状态栏显示“正在下载代理脚本…”导致Chrome浏览器启动有3-5秒的卡顿,对于一向完美主义的我绝对是不能容忍的!查了一下资料,问题没有得到解决,自己摸索了一下问题搞定!

设置 - >显示高级设置 - >网络 - >更改代理服务器设置 - >局域网设置 - >取消勾选“自动检测设置”
摘自:http://jingyan.baidu.com/article/d621e8da10a10f2865913f03.html
图示:http://jingyan.baidu.com/article/d621e8da10a10f2865913f03.html
背景:这种情况一般是干下文件啥的,你在你亲戚家下载大文件到你的vps linux上,突然有事说要停电,此时正在一半,怎么办,那就是把当前进程放后台执行,第二步是脱离终端,于是你可以关掉ssh,走路坐车回家再看下完没有,下面这就是干这事的。
0)特别注意别一直有输入,用wget时有输入,这样对于第3部就需要按回车一瞬间输入命令,比较麻烦。
1)ctrl + Z (暂停)
2)bg %1
3)看通过2推到后台后还在下没(PID=6193):
jobs -l
[1]+  6193 Running                 wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm &
4)后台,还没有脱离终端,于是,还得脱离终端:
(1)disown -h %1  
(2)nohup -p 6193  [Linux下再开一个算是优点,第(1)个有个问题是只能在当前脱离终端里输入,新开终端无效,这样试试,发现: 我的是centos好像没有这个选项。]没有disown,但是可以使用nohup -p PID来获得disown同样的效果。
关掉终端,在其它终端再ps下,还在,不错:
ps aux|grep wget
root      6193  0.1  0.0 138500  2512 ?        S    19:40   0:03 wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm
阅读全文
背景:最近发现Log目录里各种服务的日志很大,想把它们都清空(非删除)。可是文件又多,位置又不一样,于是写了个脚本,可以快速解决以上问题:

我的实践Ok如下:


解释:在/home/www目录下查找后缀是.log的所有文件,并将其内容清空!

来自:http://bbs.51cto.com/thread-1072175-1.html
         http://www.jbxue.com/LINUXjishu/14410.html

附录:
linux下清空文件内容
1、> /var/log/asterisk/messages 或者 :> /var/log/asterisk/messages (文件大小被截为0字节)
2、cat /dev/null > /var/log/asterisk/messages (文件大小被截为0字节)
3、echo "" > /var/log/asterisk/messages(文件大小被截为1字节)

背景:从最早还是svn的模块和apache结合紧密一些,而后来Nginx的崛起后,也很多服务器用的是Nginx,这块个人认为Nginx应该以Https的形式来代码Apache内部的http,这样更安全一些。
阅读全文
背景:今天自己的vps服务器突然重启了,不知何原因,下面这些方法好像也没看明白,先写这儿。
1、Linux 服务器因 CPU 温度过高自动重启
http://www.s2.cn/news.php?id=33

2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html

3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'

4、linux启动日志: /var/log/boot.log

来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
背景:visual 2008下面的这个问题确实存在。
最近尝试在windows XP下编译chromium,过程可谓艰辛无比啊,编译了一天总算是有结果了,下面就是痛苦的解决编译错误的过程了。

fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的。

解决办法:

去googlecode下载http://msinttypes.googlecode.com/files/msinttypes-r26.zip

解压后会得到三个文件,把inttypes.h和stdint.h放到vc的include目录就可以了。

我安装的是VS2008,安装到的默认位置,因此include的路径就是:

C:\Program Files\Microsoft Visual Studio 9.0\VC\include
通过以上方法,成功解决编译错误。
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/fatel-error-c1083-stdint-h-no-such-file-or-directory

简单配置,在Windows和Visual Studio上安装Boost:
http://www.cnblogs.com/me115/archive/2010/10/08/1845825.html
背景:在展会上看到一投影机电视,说是用激光色轮实现的,价格昂贵,了解下。
LED光源由于难以实现高亮度,并未实现真正的普及应用,因此更容易实现高亮度的激光光源成为了有力竞争者。
阅读全文
分页: 61/272 第一页 上页 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 下页 最后页 [ 显示模式: 摘要 | 列表 ]