持续集成(Continuous Integration ,CI)
在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。

持续集成意味着一个在家用笔记本编写代码的开发人员(嘿,史蒂夫)和另一个在办公室编程的开发人员(嘿,安妮)可以为同样的产品分别地编写软件,将其改动整合在一个叫做源存储库的地方。他们可以从各自编写的部分构建出组合的软件,并且按照他们期望的方式来测试软件。

开发人员通常使用一种叫做IC Server 的工具来做构建和集成。持续集成要求史蒂夫和安妮能够自测代码。分别测试各自代码来保证它能够正常工作,这些测试通常被称为单元测试(Unit tests)。

代码集成以后,当所有的单元测试通过,史蒂夫和安妮就得到了一个绿色构建(green build)。这表明他们已经成功地集成在一起,代码正按照测试预期地在工作。然而,尽管集成代码能够成功地一起工作了,它仍未为生产做好准备,因为它没有在类似生产的环境中测试和工作。在下面持续交付部分你可以了解到持续集成后面发生了什么。

考虑到实践持续集成,史蒂夫和安妮必须频繁地登记主代码仓库、集成和测试他们的代码。通常一小时很多次,并且每天最少一次。

持续集成的好处是,集成不再是个头疼事。软件在一直被编写和集成。在持续集成之前,集成发生在创建过程的结尾阶段,一次性完成,并且不知道要耗时多久。而现在持续集成,每天都融入到了工作方式当中。

持续交付(Continuous Delivery,CD)
让我们说回到我们的两位开发人员,史蒂夫和安妮。持续交付意味着每次史蒂夫或安妮修改、整合和构建代码时,也同时在类似于生产环境中自动测试了这段代码。我们通常将这个在不同环境发布和测试的过程叫做部署流水线。通常部署流水线有一个开发环境,一个测试环境,一个准生产环境,但是这些阶段会根据不同的团队、产品和组织而变化。例如,Mingle团队有一个阶段叫做“纸杯蛋糕”的准生产环境,而Etsy的准生产环境叫做“公主”。

在不同的环境下,安妮和史蒂夫写的代码被分别进行测试。当代码部署到生产环境它就开始了工作,这给予了他们更多的信心。并且只有当代码通过前一个环境的测试才会进入到下一个部署流水线的环境当中去。通过这种方式,安妮和史蒂夫将会从每个环境中测试并得到新的反馈,如果有失败,他们也可以在代码被应用到生产环境之前更加容易地发现问题并且修正它。

From: http://blog.dataman-inc.com/98-shurenyun-cdci/
ubuntu下hdparm测试硬盘速度

root@jack:~# fdisk -l
Disk /dev/sda: 74.5 GiB, 80026361856 bytes, 156301488 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
Disklabel type: dos
Disk identifier: 0x1555e2a7

设备       启动     Start    末尾    扇区  Size Id 类型
/dev/sda1  *         2048 151093247 151091200   72G 83 Linux
/dev/sda2       151095294 156301311   5206018  2.5G  5 扩展
/dev/sda5       151095296 156301311   5206016  2.5G 82 Linux 交换 / Solaris


root@jack:~# hdparm -t /dev/sda1

/dev/sda1:
Timing buffered disk reads: 112 MB in  3.03 seconds =  36.97 MB/sec

=========================================================
hdparm -t /dev/hda (IDE硬盘)
hdparm -t /dev/sda (SATA、SCSI、硬RAID卡阵列)
hdparm -t /dev/md0 (软RAID设备)

From:http://blog.csdn.net/amds123/article/details/68961474
http://www.jb51.net/LINUXjishu/160512.html
在ubuntu 17.04上安装了Chromium出现对话框输入密码解锁登录密钥环,如下所示:


因为密码框截图困难,这个是网上图片。

点取消就可以使用,但是每次都这样很烦,搜索后得解:
在终端输入seahorse,打开密钥管理软件,如下,注意不要加sudo:
OpenSSH Key ==>密码密钥环===》新建一个密码密钥环,chromium:

设定好密码后,再打开chromium,输入系统登录密码就OK了,之后也不会多次出现了。

From:http://www.linuxdiyf.com/linux/25176.html
背景:想从不让复制的Url里取点东西出来,看源代码放Editpuls里ctrl+b后,用浏览器打开,发现乱码,怎么办?安装Charset后,【V】允许访问文件网址,即可。

  自从谷歌升级了5.5以上之后(其实我自己也没注意到时是从哪个版本开始的),点击鼠标右键→工具→编码的功能选项没有了,这是怎么回事呢?通过搜集资料发现,原来是谷歌浏览器本身精简了这个功能,关于Google为什么要去掉这个功能,官方解释是这个功能会使得浏览器速度变慢(-1s),并且使用的不频繁,所以去除了这个功能。但是我们浏览网页或者制作网站的时候,经常会出现页面乱码的情况,这种情况就要用到编码转换的功能,而浏览器自带的这个功能没有了,怎么办呢?网上大牛给出了一个好办法:使用chrome插件(扩展应用)——Charset。

官方简介如下:由于使用频率较低,Google Chrome在55版本以后删除了手动设置网站编码的功能。但是在部分设置不规范不正确的网站,新版浏览器无法准确判断其使用的编码,导致网站显示乱码。GitHub开源地址:https://github.com/jinliming2/Chrome-Charset

Charset v0.1测试版,支持Chrome 54选择编码功能中所列出的编码进行了支持。

最后更新日期: 2017年2月14日
  我在安装Ubuntu 16.04 LTS的时候,因为磁盘分区问题,在安装的时候没有设置SWAP分区,后来在使用过程中,时而出现系统运行不流畅的情况,看来SWAP分区还是需要的。

1. 在Ubuntu中配置使用新创建的Swap分区

Command list:

# 查找Swap分区的UUID

sudo blkid

# 在/ect/fstab中加入新的Swap分区

sudo gedit /etc/fstab

# 在最后加入下列内容,xxxx为Swap分区的UUID

UUID=xxxx  none            swap    sw                0      0

# 激活Swap分区,Swap分区为/dev/sda3

sudo swapon /dev/sda3

2. 在Ubuntu中使用file当swap

Command list:

# 创建1个1GB的file

sudo dd if=/dev/zero of=/mnt/1GB.swap bs=1M count=1024

# 格式化为Swap file

sudo mkswap /mnt/1GB.swap

# 把swap file加入到系统中

sudo swapon /mnt/1GB.swap

上面的操作只是临时添加1个swap file,如果要做永久添加,则需要下列步骤。

# 在/ect/fstab中加入新的Swap分区

sudo gedit /etc/fstab

# 在最后加入下列内容

/mnt/1GB.swap none swap sw 0 0

3. Ubuntu的swap使用策略

Command list:

# 查看memory/buffer/Swap使用情况。

free

# 查看swap使用策略,Swap和memory各占百分百

# 默认是60,即Swap占60%,memory占40%

cat /proc/sys/vm/swappiness

# 修改swap使用策略

# 仅本次开机有效,重启后恢复原值

sudo sysclt vm.swappiness=20

# 修改swap使用策略,系统默认值

# 需要重启系统后,才能生效

sudo gedit /etc/sysctl.conf

# 在最后添加下列内容:

#################################################

# Set Swap usable availability

#        Swap <-------> physical memory

# default: 60%                40%

vm.swappiness=20

4. 关闭swap

sudo swapoff -a
swapon -s
Filename                                Type            Size    Used   Priority
/dev/sda2                               partition       2047992 0       -1

来自: http://www.linuxidc.com/Linux/2013-03/80208.htm
水在真空里是什么状态?
看了CCTV10的电视节目,把有水容器抽空以后,水先沸腾然后结冰了,我想问一下在太空中如果洒了水,那水成什么样子了?
还有,比如说把人扔到太空里,会成什么样子?

我在教育科技屏道看过,因为气压越低沸点越小,所以太空时,水会沸腾,但不会完全蒸发,然后因为蒸发散热,然后结冰,就和真空中原理一样,彗星就是这样的大冰块,如果象一楼说的这世上就没有扫把星了.


是的,太空实在太冷了,如果我们谈到去星际空间,远离任何星体(或者光线阴影处),唯一的温度热源来自大爆炸产生的剩余辐射,辐射的蓝海的的温度只有2.7 Kelvin,足以使的几乎不含水的氢凝固,所以如果你把水带入太空,它应该结冰,对吗?


没有这么快!液态水会在压力下降如此厉害的环境下沸腾。没错!是沸腾,你可能知道在在高纬度地区烧水,水会在较低的温度就沸腾,那就是因为你上面大气层稀薄了,所以压力降低了。再举个例子,如果我们把水放入真空室,立即抽掉空气,会发生什么?
它会沸腾!迅猛地沸腾。原因是液态水,需要一定的温度和压力,如果你给水一个特定的温度,足够低的压力会立刻让水沸腾。
另一方面,如果你给水一个特定的压力,然后再降低温度,水将会立刻结冰。

当你把水放到真空室里,其实我们是同时做两件事,把水从它所处的温度压力相结合的液态水条件下转移到更低的压力(水想沸腾), 转移到更低的温度(解释:太空温度低,沸腾气化带走热量温度降低)(水想结冰)。

你一定想问,那么水进入太空,到底会发生什么?

答案是:两种情况都会发生,水先沸腾,然后再结冰!

来自:https://m.sohu.com/n/476841175/
问题:在
$git status
# On branch master

$git checkout master
README.txt: needs merge
error: you need to resolve your current index first

git reset --merge

git pull #好了,但是出现:
# Changed but not updated:  ( Changes bu not updated → 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交)
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)

现在有两个操作可供选择,要么把暂存区的所有内容添加到当前分支上;要么清除暂存区回退成与分支内容一致,但工作区没有清除,若想把工作区也清除,就得在使用git checkout -- file(这里的--后面有一个空格键)命令了。详细解说如下:

方法一,
按提示的来:"git checkout -- <file>...,发现还是不行,其它兄弟试了下是可以的,法一居然不行,其它兄弟试可以,最后用了法二:
git checkout -- ./WxPayApi.php #某个文件
git checkout -- *  #这命令是还原当前分支下的所有修改到stage上并未commit的文件,-- 后面是文件名的意思。

以上方法没有办法搞定,奇怪了,最后还是用最后,这样解决了:
git commit -am"解决一下Master的:Changed but not updated" , 用:-am,Git的小乌龟难道看不到吗?奇怪了,默认就是-am呀,所有人都用乌龟就好了 ,绝对不会出现问题,哈哈,命令行捣蛋了???
解决办法继续参看:http://blog.csdn.net/qq_38801354/article/details/72793909



方法二、
用git commit -am"个人自媒体代码的Dev分支也解决一下Dev分支的问题,给全提交到仓库。",再提交Git服务器仓库,得以解决。
先检出Master:
$git checkout master
M       api.jackxiang.com/components/WxPay/WxPayApi.php
M       api.jackxiang.com/components/WxPay/WxPayConfig.php
M       api.jackxiang.com/components/WxPay/WxPayDataBase.php
M       api.jackxiang.com/components/WxPay/WxPayException.ph
核对还是有问题:
$git status
# On branch dev
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   api.jackxiang.com/components/WxPay/WxPayApi.php

git commit -am"只有这样解决了上面这个Changed but not updated问题"
$git commit -am"解决一下Master的:Changed but not updated"

把所有的都给提交了(Dev没有改动,无所谓):
git push --all

同理那个Dev分支也是一样的道理:
$git checkout master
$git status
$git commit -am"个人自媒体代码的Dev分支也解决一下Dev分支的问题,给全提交到仓库。"




================================================================================
从一个分支A切换到另一个分支B后,对切换后的B分支进行pull操作,因为pull操作实际上包含了fetch+merge操作,在执行 merge操作时,由于很长时间没有对B分支执行过pull/merge操作,本地的B分支库与remote中的B分支库中的差异很大(且这些差异是其他 同事开发的文件),merge时产生冲突,使得B分支的状态为merging,其实是指merge失败,还停留在merge状态,也不能执行pull操 作。这时没有解决冲突,而是从B分支上执行checkout/switchto操作,试图再切换其他分支时,报:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
…….java : needs merge  
…….java : needs merge  
…….java : needs merge  
error : you need to resolve your current index first  
的错,google了半天,终于在stackoverflow上找到了答案,大题意思是:merge失败,有conflicts没解决,可以:
1、解决conflicts后再次执行merge;
2、回退到merge前
恩,既然merge冲突是其他同事的文件,我不需要去resolve conflicts,那就退回merge前吧,单纯的改我的文件再push吧,执行以下代码:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
git reset --merge  
搞定!

顺便贴下stackoverflow上的链接:
http://stackoverflow.com/questions/6006737/git-merge-errors
本文参考来自链接:https://www.lbbniu.com/3059.html
聪者听于无声,明者见于未形

典出:汉•班固《汉书•伍被传》。

原文:“聪者听于无声,明者见于未形。”

释义:聪慧明智、思虑通达的人,善于观察、思考、深辨、细究,掌握事物的发展规律和发展方向,作出正确的判断,故能洞察事物的未来,于无声处听有声,于无形处见有形,有先见之明。

解读:中医讲“上医治未病,中医治欲病,下医治已病”,事物的发展总是经历一个阶段,高明的大夫能够在一个更长的时间段中把握人体的生长规律,从而做到预防疾病的目的。

这也是我们时常提到的把握历史规律和大势的道理,“于无声处听惊雷”,这是真正的大智慧。

无论是个体也好,国家治理者也好,培养长远的历史眼光总是不错的。每个人都身处历史洪流,既为历史所裹挟,也在创造新的历史。每一个历史转折点上,先知与后知未必都能合拍,而如何正确抉择,令人深思。


FROM:http://mp.weixin.qq.com/s/FbMzw6kg8WAsAU7kjaxptA
rpm -qf /usr/bin/nproc
coreutils-8.22-18.el7.x86_64

#nproc
1
---------------------------------------
也可这样查:
#cat /proc/cpuinfo
processor       : 0
cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

版本:php-5.6.20
configure: error: Cannot find ldap libraries in /usr/lib 解决办法:
今天在centos 6.2 64位版本上安装LNMP,config php的时候出现下面错误而退出

CentOS 64 编译PHP出现 error: Cannot find ldap libraries in /usr/lib 有需要的朋友可参考参考。
在CentOS 64位下编译安装PHP5.4.8。cp -frp /usr/lib64/libpng* /usr/lib/ 结果在configure的时候提示
configure: error: Cannot find ldap libraries in /usr/lib
提示在/usr/lib 下找不到相关模块,这是因为64位的linux默认把以上文件都存在 /usr/lib64 文件夹下。
解决方法:
代码如下
cp -frp /usr/lib64/libldap* /usr/lib/


From:http://www.iitshare.com/cannot-find-ldap-libraries-in-usrlib.html
-----------------------------------这种问题到处都有---------------------------------------
configure: error: Cannot find ldap libraries in /usr/lib
提示在/usr/lib 下找不到相关模块,这是因为64位的linux默认把以上文件都存在 /usr/lib64 文件夹下。
解决办法:
cp -frp /usr/lib64/libldap* /usr/lib/


然后再./configure ...即可

From:http://www.cnblogs.com/xiangxiaodong/p/3492156.html

打包时先拷贝,再./configure:

%build
/bin/cp -frp /usr/lib64/libldap* /usr/lib/
./configure \
--prefix=%{_prefix} \
--with-libdir=%{_lib} \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/php.d \
--with-iconv-dir=/usr/local \
--with-iconv=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-ldap \
--with-ldap-sasl \
--with-libxml-dir=/usr \
--with-curl \
--with-curlwrappers \
--with-mcrypt \
--with-gd \
--with-openssl \
--with-mhash \
--with-xmlrpc \
--without-pear \
--with-fpm-user=www \
--with-fpm-group=www \
--with-gettext \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap \
--enable-opcache \
--enable-exif \
--enable-mbregex \
--enable-inline-optimization \
--enable-ftp \
--disable-fileinfo \
--disable-rpath \
--disable-ipv6 \
--disable-debug
make ZEND_EXTRA_LIBS='-liconv' %{?_smp_mflags}

%install
rm -rf %{buildroot}
make INSTALL_ROOT=%{buildroot} install

背景:在打RPMBUILD一个张宴兄弟的httpsqs结合Libevent1.4.13的包的时候,出现错误,本来他写的是Libevent2.0,顾问在微信问了张宴兄弟下他本人说1.4.13也是也没有啥问题的,就要问了:为何要降级,因为Memcached也需要这个Libevent的低版本的,没办法,Httpsqs所以来的Libevnet也跟着降吧。出现问题:ERROR: No build ID note found in

BuildRequires: gcc,gcc-c++,make,tokyocabinet = 1.4.48,libevent >= 1.4.13
Requires: tokyocabinet = 1.4.48,libevent >= 1.4.13



还不够,得加这一行,因为不加会提示:
AutoReqProv:   no
Rpmbuild自己会自动依赖一些so动态链接库的东西,给关掉:

rpm -ihv /home/test/rpmbuild/RPMS/x86_64/httpsqs-1.7-170522172954.el6.x86_64.rpm
error: Failed dependencies:
        libevent-2.0.so.5()(64bit) is needed by httpsqs-1.7-170522172954.el6.x86_64


问题依旧:
service httpsqs start
Starting httpsqs: /usr/local/httpsqs/httpsqs: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
                                                           [FAILED]

反查一个源码,如下:
tar -zxvf httpsqs-1.7.tar.gz
httpsqs-1.7/
httpsqs-1.7/httpsqs.c
httpsqs-1.7/prename.h
httpsqs-1.7/prename.c
httpsqs-1.7/Makefile
httpsqs-1.7/.Makefile.swp
httpsqs-1.7/httpsqs   (这个文件应该是一个二进制文件,去了编译不过去,报错)

gcc -o httpsqs httpsqs.c prename.c -Wl,-rpath,/usr/local/libevent/lib/:/usr/local/tokyocabinet/lib/ -L/usr/local/libevent/lib/ -levent -L/usr/local/tokyocabinet/lib/ -ltokyocabinet -I/usr/local/libevent/include/ -I/usr/local/tokyocabinet/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g
httpsqs.c: In function 'httpsqs_handler':
httpsqs.c:350: error: 'struct evhttp_request' has no member named 'uri_elems'
make: *** [httpsqs] Error 1
error: Bad exit status from /home/test/rpmbuild/tmp/rpm-tmp.OyM3VG (%build)
果然:
grep -r "libevent-2.0" ./
Binary file ./httpsqs matches

[root@  httpsqs]# stat httpsqs
  File: `httpsqs'
  Size: 20184           Blocks: 40         IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 1066707     Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-05-22 17:58:26.000000000 +0800
Modify: 2017-05-22 17:58:26.000000000 +0800
Change: 2017-05-22 17:58:50.635000020 +0800
[root@  httpsqs]# ldd httpsqs
        linux-vdso.so.1 =>  (0x00007ffd27464000)
        libevent-2.0.so.5 => not found
        libtokyocabinet.so.9 => /usr/local/tokyocabinet/lib/libtokyocabinet.so.9 (0x00007fed13df0000)
        libz.so.1 => /lib64/libz.so.1 (0x0000003cf6c00000)
        libbz2.so.1 => /lib64/libbz2.so.1 (0x0000003cfc000000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003cf7c00000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003cf7400000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003cf8000000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003cf7000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003cf6800000)
但是编译是从这儿编译的:
rpm -qa|grep libevent
libevent-devel-1.4.13-4.el6.x86_64
libevent-1.4.13-4.el6.x86_64
libevent-doc-1.4.13-4.el6.noarch
libevent-headers-1.4.13-4.el6.noarch
难怪了,原来写二进制里面了:^@^@^@^@^@^@^@^@libevent-2.0.so.5^@__gmon_start__^@_Jv_RegisterClass
稍微深入到源码看一下:

rpm2cpio libevent-2.0.22-170116172306.el6.x86_64.rpm |cpio -div
/usr/local/libevent/include/event2/http_struct.h

httpsqs.c:350: error: ‘struct evhttp_request’ has no member named ‘uri_elems’

struct evhttp_request{#57行到123行都是这个结构体的,而这个uri_elems定义在在98行。
  struct evhttp_uri *uri_elems;   /* uri elements */
}

张宴兄弟的源码里文件之httpsqs.c:350行:
350         httpsqs_query_part = evhttp_uri_get_query(req->uri_elems);

而旧的版本没有这个http_struct.h文件及结构体,如下:
rpm -ql libevent-headers-1.4.13-4.el6.noarch
/usr/include/evdns.h
/usr/include/event-config.h
/usr/include/event.h
/usr/include/evhttp.h
/usr/include/evrpc.h
/usr/include/evutil.h

所以,张宴兄弟的说法不成立。


还不放心,看一下源码包,不看RPM包,有可能RPM包没有打进来?
http://pkgs.fedoraproject.org/repo/pkgs/libevent/libevent-1.4.13-stable.tar.gz/
DownLoad:http://pkgs.fedoraproject.org/repo/pkgs/libevent/libevent-1.4.13-stable.tar.gz/0b3ea18c634072d12b3c1ee734263664/libevent-1.4.13-stable.tar.gz
解压后,再用Editplus查找:uri_elems,并没有找到这个结构体变量,如下:
-- 在文件中查找: uri_elems in E:\download\libevent-1.4.13-stable excl *.* --
找到 0 个事件 (在 0 个文件中)。
输出完成 (耗时 0 秒)

So,张宴兄弟长时间没有看这块代码,应该是记错了!!!



在Fedora14中打rpm包,是没有/usr/src/redhat这个目录的,而是要建立~/rpmbuild目录,并建立SOURCES、SPECS、RPMS等相应目录。其它步骤相同。
但是在rpmbuild -ba时,遇到如下错误:
*** ERROR: No build ID note found in /home/wuyang/rpmbuild/BUILDROOT/******
error: Bad exit status from /var/tmp/rpm-tmp.BPd1OI (%install)


gcc -o httpsqs httpsqs.c prename.c -Wl,-rpath,/usr/local/libevent/lib/:/usr/local/tokyocabinet/lib/ -L/usr/local/libevent/lib/ -levent -L/usr/local/tokyocabinet/lib/ -ltokyocabinet -I/usr/local/libevent/include/ -I/usr/local/tokyocabinet/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g
修改为:
gcc -o httpsqs httpsqs.c prename.c -Wl,-rpath,/usr/lib64:/usr/local/tokyocabinet/lib/ -L/usr/lib64 -levent -L/usr/local/tokyocabinet/lib/ -ltokyocabinet -I/usr/include/ -I/usr/local/tokyocabinet/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g
[root@yum_rpmbuild-centos6_bj_sjs_10_71_183_1** httpsqs-1.7]# gcc -o httpsqs httpsqs.c prename.c -Wl,-rpath,/usr/lib64:/usr/local/tokyocabinet/lib/ -L/usr/lib64 -levent -L/usr/local/tokyocabinet/lib/ -ltokyocabinet -I/usr/include/ -I/usr/local/tokyocabinet/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g
httpsqs.c: In function ‘httpsqs_handler’:
httpsqs.c:350: error: ‘struct evhttp_request’ has no member named ‘uri_elems’

rpm -ql libevent-1.4.13-4.el6.x86_64
/usr/lib64/libevent-1.4.so.2
/usr/lib64/libevent-1.4.so.2.1.3
/usr/lib64/libevent_core-1.4.so.2
/usr/lib64/libevent_core-1.4.so.2.1.3
/usr/lib64/libevent_extra-1.4.so.2
/usr/lib64/libevent_extra-1.4.so.2.1.3
/usr/share/doc/libevent-1.4.13
/usr/share/doc/libevent-1.4.13/README
rpm -ql libevent-devel-1.4.13-4.el6.x86_64
/usr/bin/event_rpcgen.py
/usr/lib64/libevent.a
/usr/lib64/libevent.so
/usr/lib64/libevent_core.a
/usr/lib64/libevent_core.so
/usr/lib64/libevent_extra.a
/usr/lib64/libevent_extra.so
/usr/share/man/man3/evdns.3.gz
/usr/share/man/man3/event.3.gz
rpm -ql libevent-headers-1.4.13-4.el6.noarch
/usr/include/evdns.h
/usr/include/event-config.h
/usr/include/event.h
/usr/include/evhttp.h
/usr/include/evrpc.h
/usr/include/evutil.h




解决方法是在.spec文件中任意位置添加如下参数:
%define __debug_install_post   \
   %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}

重新打包,即可。
另外最后生成的rpm包是在/RPMS/i686中

来自:http://blog.csdn.net/onlyou930/article/details/6995645
背景:CentOS7版本,出现执行完了后,并没有真的分割,这奇怪了,方向应该是这个方向,开源就有这个问题,老是出现各种问题。。。。搜索引擎很重要。
多了个-d参数代表只执行预演调试而不实际执行归档操作,配置输出的日志如下:
情况一:chown -R root:root  /usr/local/tomcat/conf/tomcat.logrotate
logrotate -v -f -d  /usr/local/tomcat/conf/tomcat.logrotate                
reading config file /usr/local/tomcat/conf/tomcat.logrotate
olddir is now oldlogs
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /data/logs/tomcat/*.log  forced from command line (30 rotations)
olddir is oldlogs, empty log files are not rotated, old logs are removed
considering log /data/logs/tomcat/catalina.log
  log needs rotating
considering log /data/logs/tomcat/localhost-access.log
  log does not need rotating (log is empty)considering log /data/logs/tomcat/localhost.log
  log does not need rotating (log is empty)rotating log /data/logs/tomcat/catalina.log, log->rotateCount is 30
dateext suffix '-20170515'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
copying /data/logs/tomcat/catalina.log to /data/logs/tomcat/oldlogs/catalina.log-20170515
truncating /data/logs/tomcat/catalina.log
发现还是没有真的拷贝到里面:
分割日志时报错:error: skipping "/var/log/nginx/test.access.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
答:添加“su root list”到/etc/logrotate.d/nginx文件中即可
如下;
/var/log/nginx/*.log {
        su root list
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        #ifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}
chmod -R 640 /data/logs/tomcat/
不行的,这一个国外网站有写:https://ma.ttias.be/logrotate-on-rhelcentos-7-complains-about-insecure-permissions-on-parent-directory-world-writable/
来个中文的:https://blog.longwin.com.tw/2016/01/logrotate-perm-modify-rotete-failed-2016/
switching euid to 0 and egid to 1022
tomcat的组Id:1022
[codes]
/data/logs/tomcat/*.log {
    su root tomcat                                                                                                
    daily
    rotate 30
    missingok
    dateext
    notifempty
    #create 0644 tomcat root
    copytruncate
    olddir oldlogs
}
[/codes]

logrotate -v -f -d  /usr/local/tomcat/conf/tomcat.logrotate
reading config file /usr/local/tomcat/conf/tomcat.logrotate
olddir is now oldlogs
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /data/logs/tomcat/*.log  forced from command line (30 rotations)
olddir is oldlogs, empty log files are not rotated, old logs are removed
switching euid to 0 and egid to 1022
considering log /data/logs/tomcat/catalina.log
  log needs rotating
considering log /data/logs/tomcat/localhost-access.log
  log does not need rotating (log is empty)considering log /data/logs/tomcat/localhost.log
  log does not need rotating (log is empty)rotating log /data/logs/tomcat/catalina.log, log->rotateCount is 30
dateext suffix '-20170515'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
copying /data/logs/tomcat/catalina.log to /data/logs/tomcat/oldlogs/catalina.log-20170515
truncating /data/logs/tomcat/catalina.log
switching euid to 0 and egid to 0


情况二:selinux影响:
access("/etc/selinux/config", F_OK)     = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4

service selinux stop
Redirecting to /bin/systemctl stop  selinux.service
Failed to stop selinux.service: Unit selinux.service not loaded.


chcon -Rv --type=var_log_t /data/logs/tomcat
正在更改"/data/logs/tomcat/localhost.log" 的安全环境
chcon: 部分关联无法应用于文件"localhost.log"
正在更改"/data/logs/tomcat/catalina.log" 的安全环境
chcon: 部分关联无法应用于文件"catalina.log"
正在更改"/data/logs/tomcat/oldlogs" 的安全环境
chcon: 部分关联无法应用于文件"oldlogs"
正在更改"/data/logs/tomcat/localhost-access.log" 的安全环境
chcon: 部分关联无法应用于文件"localhost-access.log"
正在更改"/data/logs/tomcat" 的安全环境
chcon: 部分关联无法应用于文件"/data/logs/tomcat"
创建规则容易,如何取消规则?
------------------------------------------

开始-----规则---下拉菜单中选择管理规则和通知。
勾选需要取消的规格,将其删除,确定。

来自:http://wenda.so.com/q/1459278170727172?src=140

创建规则:http://wenda.so.com/q/1369953110068210
背景:在windows下提交了一个git更新,想在linux下强制更新(这个linux下的文件也被我改动了),以windows下提交的为准怎么办?还会出错,如下:
Git pull 强制覆盖本地文件,与在git bash下实践OK,AddTime:2016-9-29

git fetch --all  
git reset --hard origin/master
git pull


来自:http://blog.csdn.net/baple/article/details/49872765


一)出错:
新增文件add commit后,push回原分支失败,报错:
  Counting objects: 20, done.
  Delta compression using up to 24 threads.
  Compressing objects: 100% (11/11), done.
  Writing objects: 100% (11/11), 1.30 KiB, done.
  Total 11 (delta 5), reused 0 (delta 0)
  error: insufficient permission for adding an object to repository database ./objects


二)git本地有修改如何强制更新到远程:
本地有修改和提交,如何强制用远程的库更新更新。我尝试过用git pull -f,总是提示 You have not concluded your merge. (MERGE_HEAD exists)。
我需要放弃本地的修改,用远程的库的内容就可以,应该如何做?傻傻地办法就是用心的目录重新clone一个,正确的做法是什么?

正确的做法应该是:
git fetch --all
git reset --hard origin/master
git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本

参考链接:

http://stackoverflow.com/questions/1125968/force-git-to-overwrite-local-files-on-pull
实际情况:git mv后的情况及提交,只能分开提交(如果:git commit -a"" fileA fileB...),没法和文件一块Commit! 没有试过:git commit -am"xxx",应该可以。
git rename怎么搞:
设置git库为大小写敏感(不建议)
$
git config core.ignorecase false
使用git mv命令(仅当core.ignorecase为true时可用)
$ git mv ABC.java
Abc.java

$ git status

......
renamed:
ABC.java -> Abc.java
实践发现问题:
1)Linux系统权限不对也会引起下面的问题。
2)有兄弟说那个暂时过渡一下,我是权限问题导致。
Git命令错误记录之git mv: fatal: renaming failed: Permission denied
git mv gittest.net.conf jackxiang.net.conf    
fatal: renaming 'playbook/baige.cctv.com/files/jackxiang.net.conf' failed: Permission denied


运行环境:Windows 7,git version 1.9.5.github.0
解决方法:通过创建一个临时文件夹名字来中转。例如:

git mv oldFolderName tempFolderName
git mv tempFolderName newFolderName
From:http://www.cnblogs.com/sincerely/p/4230531.html
More:http://blog.csdn.net/njafei/article/details/53433023

git mv后的情况及提交,只能分开提交,没法和文件一块Commit:
git commit -m"renamed and deleted file"
[master 2626a4d] renamed and deleted file
4 files changed, 0 insertions(+), 12 deletions(-)
rename playbook/baige.jackxiang.com/files/{api.baiger.com.conf => api.baiger.jackxiang.com.conf} (100%)
delete mode 100644 playbook/baige.jackxiang.com/files/mount.sh
rename playbook/baige.jackxiang.com/files/{upload.baige.com.conf => upload.baige.jackxiang.com.conf} (100%)
rename playbook/baige.jackxiang.com/{manage.baige.jackxiang.net.yml => manage.baige.jackxiang.net.yml} (100%)


git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    files/api.baiger.com.conf -> files/api.baiger.jackxiang.com.conf
#       deleted:    files/mount.sh
#       renamed:    files/upload.baige.com.conf -> files/upload.baige.jackxiang.com.conf
#       renamed:    manage.baige.jackxiang.net.yml -> manage.baige.jackxiang.net.yml


http://blog.csdn.net/get_set/article/details/51018142
ubuntu 16.04在升级17.04时候,出现Failed to start Load Kernel Modules 解决方法:
升级的时候不小心重启了,就看到出现这个错误,鼠标挂了,wifi没了,当时感觉是重装系统的节奏了,搜了下,有治。方法如下:
进入到命令行模式:ctl + alt + F1
在root模式下输入一下指令:
apt-get update

dpkg --configure -a

apt-get dist-upgrade

apt-get -f install

reboot

到此就可以了,这是在ubuntuforums.org上看到的。特此记录!!!

来自:http://m.blog.csdn.net/article/details?id=54091293
https://askubuntu.com/questions/809199/failed-to-start-load-kernel-modules-ubuntu-16-04
背景:是Ubuntu17.04,Chrome出现双击右键才出现, 一直以为是RP问题,后来发现貌似不止我一个人有这个疑问,Google Chrome右键不灵,Chrome for Mac为何双击右键才出现菜单?

是因为你装了 Smooth Gestures 或者类似的鼠标手势插件。在 Chrome for Mac 中,系统的右键菜单在 mouse down 的时候就弹出,这和鼠标手势使用冲突。因此 Smooth Gesture 禁用了右击打开菜单,改成在双击的时候再弹出。

其实不光是 Mac,在 Linux 下也是有这个问题的。Chrominum 的 google code 上有人报过这个问题,而开发人员则认为在 GTK 应用程序中,右键菜单就是应该在 mouse down 的时候弹出,所以他们把问题标记成了 WontFix:http://code.google.com/p/chromium/issues/detail?id=26666
实际情况:git mv后的情况及提交,只能分开提交(如果:git commit -a"" fileA fileB...),没法和文件一块Commit! 没有试过:git commit -am"xxx",应该可以。
git rename怎么搞:
设置git库为大小写敏感(不建议)
$
git config core.ignorecase false
使用git mv命令(仅当core.ignorecase为true时可用)
$ git mv ABC.java
Abc.java

$ git status

......
renamed:
ABC.java -> Abc.java
实践发现问题:
1)Linux系统权限不对也会引起下面的问题。
2)有兄弟说那个暂时过渡一下,我是权限问题导致。
Git命令错误记录之git mv: fatal: renaming failed: Permission denied
git mv gittest.net.conf jackxiang.net.conf    
fatal: renaming 'playbook/baige.cctv.com/files/jackxiang.net.conf' failed: Permission denied


运行环境:Windows 7,git version 1.9.5.github.0
解决方法:通过创建一个临时文件夹名字来中转。例如:

git mv oldFolderName tempFolderName
git mv tempFolderName newFolderName
From:http://www.cnblogs.com/sincerely/p/4230531.html
More:http://blog.csdn.net/njafei/article/details/53433023

git mv后的情况及提交,只能分开提交,没法和文件一块Commit:
git commit -m"renamed and deleted file"
[master 2626a4d] renamed and deleted file
4 files changed, 0 insertions(+), 12 deletions(-)
rename playbook/baige.jackxiang.com/files/{api.baiger.com.conf => api.baiger.jackxiang.com.conf} (100%)
delete mode 100644 playbook/baige.jackxiang.com/files/mount.sh
rename playbook/baige.jackxiang.com/files/{upload.baige.com.conf => upload.baige.jackxiang.com.conf} (100%)
rename playbook/baige.jackxiang.com/{manage.baige.jackxiang.net.yml => manage.baige.jackxiang.net.yml} (100%)


git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    files/api.baiger.com.conf -> files/api.baiger.jackxiang.com.conf
#       deleted:    files/mount.sh
#       renamed:    files/upload.baige.com.conf -> files/upload.baige.jackxiang.com.conf
#       renamed:    manage.baige.jackxiang.net.yml -> manage.baige.jackxiang.net.yml


http://blog.csdn.net/get_set/article/details/51018142
前段时间在阿里云上部署docker服务(或者是安装glusternfs要求较高版本的内核),由于阿里云自带centos的内核版本地较低第所以遇到了升级内核问题。这篇文章简单介绍一下升级centos的过程。

1、导入key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

2、安装elrepo的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm  
(这个命令并不行,手工解压elrepo-release-7.0-2.el7.elrepo.noarch.rpm并拷贝elrepo.repo更靠谱。rpm2cpio elrepo-release-7.0-2.el7.elrepo.noarch.rpm |cpio -div)

3、安装内核
yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y
kernel-ml-devel-4.11.2-1.el7.elrepo.x86_64
kernel-ml.x86_64 0:4.11.2-1.el7.elrepo              kernel-ml-devel.x86_64 0:4.11.2-1.el7.elrepo            


查看最新内核版本
[root@iZ25x4ab3lrZ ~]# uname -r
4.8.10-1.el7.elrepo.x86_64

注意:虽然此刻看到的版本已经升级到最新,但是此时如何重启服务器,内核版本就会回到最初的版本。因此在reboot前还需要设置内核的默认启动顺序。
查看默认启动顺序:

[root@iZ25x4ab3lrZ ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.8.10-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (0-rescue-7d26c16f128042a684ea474c9e2c240f) 7 (Core)

设置默认启动(从0开始计数)===>前面安装的是:kernel-ml-devel-4.11.2-1.el7.elrepo.x86_64
grub2-set-default 0
=======================================================================================
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.11.2-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.16.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.6.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.36.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.22.2.el7.x86_64) 7 (Core)
CentOS Linux (4.4.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux, with Linux 0-rescue-45461f76679f48ee96e95da6cc798cc8

4、重启,完成设置,并验证,成功升级到CentOS7.2:
#cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
#uname -r
4.11.2-1.el7.elrepo.x86_64

From:                http://www.2cto.com/os/201701/587143.html
提取出Rpm包里的文件:http://justwinit.cn/post/8922/
实践发现:删除多了一个linux-image-extra-4..0-78-generic,应该留下俩。

当linux有新的内核发布时,ubuntu会把当前的内核更新为最新的内核,时间久了,电脑中会同时存在多个内核,最明显的是每次开机的时候,会有多个开机选项,比较麻烦。如果自己不想再使用以前的内核,可以考虑删除旧的内核,一来可以释放部分硬盘资源(一个内核100多M的样子吧),二来开机界面比较清新。



1.sunny@ubuntu:~$ dpkg --get-selections|grep linux-image
linux-image-2.6.38-10-generic            install
linux-image-2.6.38-11-generic            install
linux-image-2.6.38-12-generic            install
linux-image-2.6.38-13-generic            install
linux-image-generic                            install



2.查看当前使用的内核

sunny@ubuntu:~$ uname -a
Linux ubuntu 2.6.38-13-generic #56-Ubuntu SMP Tue Feb 14 12:40:40 UTC 2012 i686 i686 i386 GNU/Linux



3.删除其它旧的内核

sunny@ubuntu:~$ sudo apt-get remove linux-image-2.6.38-10-generic linux-image-2.6.38-11-generic linux-image-2.6.38-12-generic



4. 然后做下清理(可有可无)

sunny@ubuntu/usr/src sudo apt−get clean
sunny@ubuntu:/usr/srcsudoapt−getclean
sunny@ubuntu:/usr/src sudo apt-get autoclean


ubuntu中删除显示为deinstall的linux内核:
http://blog.csdn.net/iam333/article/details/37874683

下次开机就没有那些旧的内核了。
来自:http://www.cnblogs.com/king-77024128/articles/2507280.html

http://blog.csdn.net/u010987458/article/details/72381998
下载Adobe Flash Player

https://get.adobe.com/flashplayer/?no_redirect

解压:


tar -xf xxx.tar
得到一个libpepflashplayer.so文件。


2. 加入Chromium的插件文件夹


sudo cp libpepflashplayer.so /usr/lib/chromium-browser/plugins

3. 在Chromium的启动选项中加入这一插件


sudo gedit /etc/chromium-browser/default
在flags一行加上:


CHROMIUM_FLAGS="--ppapi-flash-path=/usr/lib/chromium-browser/plugins/libpepflashplayer.so --ppapi-flash-version=11.5.31.2"
version可以从下载包里面的manifest.json文件里面看到。

启用插件

启动Chromium浏览器,在地址栏输入
chrome://plugins/

启用插件即可


http://www.cnblogs.com/linkzijun/p/6492761.html
参数之f3,砍断后第三节,如下:

$git branch -a|grep -v "*" | grep -v ">"
  master
  remotes/origin/dev
  remotes/origin/master


Cut上来:

$git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3
  master
dev
master



sed 去空格和Tab:

git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3|sed "s/^[ \t]*//g"



去掉重复行:

$git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3|sed "s/^[ \t]*//g"
master
dev
master



按正顺序sort:(反着排序 -r)

$git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3|sed "s/^[ \t]*//g"|sort
dev
master
master



uniq上来去重:

git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3|sed "s/^[ \t]*//g"|sort|uniq



防止太多,限制10条,head -10上来:

git branch -a|grep -v "*" | grep -v ">"|cut -d "/" -f3|sed "s/^[ \t]*//g"|sort|uniq|head -10




当然,还有更简单的,不用git branch -a:
主要是了解命令:

$git branch |sed "s# ##g"|sed "s#*##"
dev
master

addr:You have new mail in /var/spool/mail/root


分页: 8/248 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]