Archive for linux

这个机器是hp n54l的升级版proliant,主要内存和自带的硬盘容量变大。 准备工作,买的日货,淘宝代购,省了1000块钱,邮费ems300,总共1300。期间“离开处理中心,发往留存(待验)”的快递状态搜了一下以为要悲剧,没想到几个小时就放行了,网上有说是ems的制度问题,来不及处理的货物就这样了。 系统安装到u盘中,翻了一下有金士顿俩个u盘 一个16g 一个8g。8g的里边应该是ubuntu64位的启动安装盘,不动了。正好准备用16g的, 防止容量不够。 下载了FreeNAS-9.3-STABLE-201506042008.iso官方镜像,搜了一下发现mac上没有啥好的制作U盘启动盘的工具,放到windows虚拟机里边制作吧。 哈哈 不是太顺利,wind我说下的以前用的刻盘工具不好用,然后用官网的dd操作。。然后mac识别不出U盘来了。 退出u盘 ,插入启动。然后一个U盘不行,说没有权限安装失败。看来幸好两个u盘了,把那个小的做成启动盘,装到这个大的里边。try 安装成功了,还是官网文档好。 下边重启配置,配置ip.选网卡,重置网络配置,no;dhcp, no; ipv4 yes 输入ip地址 192.168.0.88/24; ipv6 no; route yes, 192.168.0.1; ipv6 no; dns yes; 用的阿里的dns,没用本地网的,不然以后还要改 然后重启 然后就能192.168.0.88访问系统了,嘎嘎。卧槽 默认用户名密码还不知道。吐血,系统root+root密码 选键盘 语言 时区,时区没找到北京 选上海 键盘没选 配置raid的时候,只能选默认了,看容量是raid1, 我去配置好麻烦不记了,配置向导发送邮件还没配置好,跳过了

Continue

说说研究这个的起因: 妹子这几天心情不好,频发状态,为了随时了解她的动态,觉得写个接口时刻关注她是否发送新状态。mac下的通知中心是最好的消息提醒了,比ubuntu下的好多了,非常容易看到而且不烦人,所以想看看能不能调这个通知中心的接口。 系统编程肯定是可以了,但是我想用python写脚本,于是google一下,没有。改成英文找到了。。 几个关键的知识点: osascript https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/osascript.1.html https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptX/AppleScriptX.html#//apple_ref/doc/uid/10000156-BCICHGIE 这应该是osx的系统级脚本语言,类似之前windows的vbscript吧。最早就用VBscript就能写界面程序,只要一个vbs脚本,学那个的时候才刚研究编程。 无需写个脚本,osascript有个-e参数,后面可以跟一个多行的脚本语句。就这个了。 想弹出一个提示,只要终端执行:osascript -e 'display notification "Content ! !" with title "Title"' subtitle display notification "message" with title "title" subtitle "subtitle" sound声音 display notification "message" sound name "Sound Name"声音文件都在 ~/Library/Sounds /System/Library/Sounds ok,直接python调一下语句就行了。后边两个是看stackoverflow上总结的,只管记录一下,以后说不定用到,应该问的也能查到。 通知中心的偏好设置里边,appscript编辑器必须在-在通知中心里边,这样才会有提示。 https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW224

Continue

Freebsd下查看进程打开了那些文件 procstat -f PID FreeBSD 下的rc.conf 不重启立即生效 # sh /etc/rc vmstat结果内容的解释 最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒时间内进行N(5)次采样。如果只使用vmstat,无法反映真正的系统情况。 procs: r–>在运行的进程数 b–>在等待io的进程数(等待i/o,paging等等) w–>可以进入运行队列但被替换的进程 memoy(以k为单位,包括虚拟内核和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active) avm–>活动的虚拟内存 free–>空闲的内存 pages(统计错误页和活动页,每5秒平均一下,以秒为单位给出数值) flt–>错误页总数 re–>回收的页面 pi–>进入页面数 po–>出页面数 fr–>空余的页面数 sr–>每秒通过时钟算法扫描的页面 disk 显示每秒的磁盘操作(磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的,可以加-n来增加数字或在命令行下把磁盘名都填上。) fault 显示每秒的中断数 in–>设备中断 sy–>系统中断 cy–>cpu交换 cpu 表示cpu的使用状态 cs–>用户进程使用的时间 sy–>系统进程使用的时间 id–>cpu空闲的时间 解释: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。 如果pi,po 长期不等于0,表示内存不足。 如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

Continue

新创建一个表保存最大id,区分主索引和增量索引 # 搜索索引相关 CREATE TABLE index_delta ( id SERIAL PRIMARY KEY, max_id integer ); INSERT INTO index_delta (id, max_id) VALUES (1, 0); 我这里直接插入数据,后边配置的时候直接使用update就行了,不然太麻烦。 配置文件;先大体测试了一下,应该没什么问题了,安装的3.2版本的coreseek,好多功能没有,不过够用了,先布置到线上看看效果

source main
{
        type                    = pgsql

        sql_host                = localhost
        sql_user                = pgsql
        sql_pass                =
        sql_db                  = bt
        sql_port                = 5432  # optional, default is 3306

        sql_query_pre = SET NAMES 'UTF8'
        sql_query_pre = UPDATE index_delta set id=1, max_id=max FROM (SELECT MAX(id) AS max FROM hash) AS foo;

        sql_query_range = SELECT MIN(id),MAX(id) FROM hash
        sql_range_step = 1000
        sql_query = SELECT id, hash, extract('epoch' FROM insert_time)::int AS date_added, name, files \
                FROM hash WHERE id>=$start AND id<=$end AND id<=(select max_id from index_delta )

        # sql_attr_uint         = hash
        sql_attr_timestamp      = date_added
        # sql_field_string = name
        # sql_field_string = files

        sql_query_info_pre      = SET NAMES utf8
        sql_query_info          = SELECT * FROM hash WHERE id=$id
}

source delta : main
{
    sql_query_pre = SET NAMES 'UTF8'
    sql_query_range = SELECT a.min_id, b.max_id FROM (SELECT MAX(id) AS max_id FROM hash) AS b, \
                (SELECT max_id AS min_id FROM index_delta) AS a
    sql_range_step = 1000
    sql_query = SELECT id, hash, extract('epoch' FROM insert_time)::int AS date_added, name, files \
                FROM hash WHERE id>(select max_id from index_delta ) AND id>=$start AND id<=$end
}

index main
{
        source                  = main
        path                    = /usr/local/coreseek/var/data/main
        docinfo                 = extern
        # charset_type          = sbcs

        # rt_field = name
        # rt_field = files

        mlock            = 0
        morphology        = none
        min_word_len        = 1
        html_strip = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        charset_type            = zh_cn.utf-8
        ngram_len=0
}

index delta : main
{
        source = delta
        path = /usr/local/coreseek/var/data/delta
        docinfo = extern

        mlock            = 0
        morphology        = none
        min_word_len        = 1
        html_strip = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        charset_type            = zh_cn.utf-8
        ngram_len=0

}


indexer
{
        mem_limit               = 64M
}
index main
{
        source                  = main
        path                    = /usr/local/coreseek/var/data/main
        docinfo                 = extern
        # charset_type          = sbcs

        # rt_field = name
        # rt_field = files

        mlock            = 0
        morphology        = none
        min_word_len        = 1
        html_strip = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        charset_type            = zh_cn.utf-8
        ngram_len=0
}

index delta : main
{
        source = delta
        path = /usr/local/coreseek/var/data/delta
        docinfo = extern

        mlock            = 0
        morphology        = none
        min_word_len        = 1
        html_strip = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        charset_type            = zh_cn.utf-8
        ngram_len=0

}


indexer
{
        mem_limit               = 64M
}
sphinx自带python的api接口,在源代码的api目录里,python api/test.py MP4,可以搜索MP4的关键字,测试一下可以用。 看了一眼sphinx.py,就是请求的listen端口。这个后边慢慢研究一下。 >>> import sphinxapi >>> c = sphinxapi.SphinxClient() >>> q = c.Query('world')

Continue

基本都是coreseek官网提供的命令安装,但是在freebsd上出现很多问题,都是查找解决的。 sh buildconf.sh最后没有生成configure脚本,且提示automake: warnings are treated as errors 在 csft-4.1/buildconf.sh 文件中,查找 && aclocal \ 后加上 && automake --add-missing \ 在 csft-4.1/configure.ac 文件中,查找: AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 改为: AM_INIT_AUTOMAKE([-Wall foreign]) 这里支持pgsql接口 ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --without-mysql --with-pgsql --enable-id64 编译的时候出错 sphinxexpr.cpp:1746:43: error: ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] 可以直接修改src/sphinxexpr.cpp文件的1746, 1777和1823行,将三行中的ExprEval改为this->ExprEval undefined reference to `libiconv' 这个直接采用官方的第三种方法了,为了方便。。 配置完建立索引的时候 source 'src1': unknown type 'pgsql'; skipping. 卧槽 4.1编译完以后一直内存段错误 ,找不到问题。换成稳定版本,libiconv采用第二种方法,成功。 /usr/local/coreseek/bin/searchd -c /usr/local/etc/sphinx.conf启动 加-h查看参数 /usr/local/coreseek/bin/search -c /usr/local/etc/sphinx.conf -a mp4 搜索 明天详细研究一下配置文件 ########### 测试完真正安装的时候又报错了。 编译mmseg的时候报错ThesaurusDict.h:12:17: error: expected namespace name 编辑文件:ThesaurusDict.h 在头部找到:#include 再其下加入一行代码:#include 3.2修改src/sphinxexpr.cpp的1080,1013,1047行

Continue

从网上找到这个插件可以查看postgresql数据库执行的慢sql。于是安装试试,but   先写出文档来http://www.postgresql.org/docs/current/static/pgstatstatements.html 配置文件需要做的更改 # postgresql.conf shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.max = 10000 pg_stat_statements.track = all 重启postgresql后,发现报错了“could not access file "pg_stat_statements": No such file or directory”。从网上也没找到问题,群里问也没说的。然后慢慢查postgresql插件的资料,发现我freebsd机器插件目录里没有这个插件。/usr/local/share/postgresql/extension 然后我看了pkg的包资料,发现应该是少装了一个包, pkg info | grep postgresql 安装之,修改配置文件,重启。这次正确重启了。然后 create extension pg_stat_statements; \dx查看 多了一个pg_stat_statements.成功了。我的程序一直在跑,然后直接就查这个表就能看到数据。给力的功能。 这个是官方给的sql查询的,我觉得看单次最大时间,和单条平均时间还是有用的。哈哈,这个看了还要再算一下。 清空数据:SELECT pg_stat_statements_reset();

Continue

//\加上字母l,相当于mysql的,mysql> show databases;
\l
//以KB,MB,GB的方式来查看数据库大小
select pg_size_pretty(pg_database_size('playboy'));
//相当于mysql的,mysql> show tables;
\dt
//以KB,MB,GB的方式来查看表大小
select pg_size_pretty(pg_relation_size('test'));
//查看表的总大小,包括索引大小
select pg_size_pretty(pg_total_relation_size('test'));
//查看索大小
select pg_size_pretty(pg_relation_size('playboy_id_pk'));
哈哈 这里我查了一下表数据80M,一个全文检索索引230M。
//查看所有表空间 select spcname from pg_tablespace;
//查看表空间大小
select pg_size_pretty(pg_tablespace_size('pg_default'));

Continue

今天freebsd上装nasm的时候,爆了这个奇怪的错误,开始以为不是本地的原因就源码安装,成功安装了。
晚上安装别的又出现这个错误了,于是找了一下解决方法。

sudo pkg update -f

Continue

说说为啥发现这么个蛋疼方法。昨晚上想测试一个手机app的安全问题,想进行网络抓包。然后mac没法插网线不能开WiFi共享,无法通过在mac上抓包实现了。然后用freebsd虚拟机想试试混杂模式看能不能获取到,搞了半天没成功,今天也没再试。mac好像还不支持混杂模式。然后搜索发现网上有一种代理的方法,看看头就大了。又发现一种使用安卓sdk里的工具进行抓包的方法,试用了一下。 安卓手机usb连接电脑,这个在android studio里会显示,直接插入,在mac下以前都没反应。 adb工具目录在 ~/Library/Android/sdk/platform-tools/adb 。 然后使用./adb devices 可以查看当前连接的手机设备 然后 ./adb push /Users/a0x55aa/Downloads/tcpdump /data/local/tcpdump 1673 KB/s (645840 bytes in 0.376s) copy到手机上 ./adb shell 连接到手机的shell上,可以先ls一下刚刚拷贝的tcpdump是否在,然后附上执行权限 chmod 777 /data/local/tcpdump 然后tcpdump -i any -p -s 0 -w /sdcard/capture0.pcap抓包,操作手机,完毕后停止 对 整个操作要root权限,我手机已root,adb shell的时候就已经是root用户了。。 最后 在你电脑的shell上执行./adb pull /sdcard/capture0.pcap ~/ 3333 KB/s (165496 bytes in 0.048s) 将抓取的包文件 下载下来 用Wireshark分析就行了。 安卓开发还没研究,应用的信息有一个重要目录 /data/data/app_name/ 记录一下。

Continue

折腾了好长时间,重新初始化好多次。 安装的时候,命令:pkg search postgresql.额 好多包,选择最新的9.4安装server,会一起安装client。安装完会有很多文字提示,这个很有用。安装完会新建一个用户pgsql,家目录为/usr/local/pgsql. 第一步, 要先切换到pgsql用户下,su root, su pgsql。然后在pgsql home目录创建data文件夹。root用户下好像是不允许的 初始化,initdb -D /usr/local/pgsql/data/ ,会生成很多文件。初始化数据库存储区,会自动创建一个 postgres的数据库,放乱七八糟的设置和第三方插件的数据。还会有一个模板 template1。这里还不是很清楚,以后创建数据库就会用这个模板创建。这里要说的是数据库编码的问题,这里悲剧的初始化了好多次。 默认执行上边的命令后,提示文字会跟你说(当时没看。。)默认数据库编码为“sql_ascii”,默认文本搜索设置为 english。。我靠执行的时候就瞅着屏幕发呆了,就等执行完。。。重新初始化的方法,我也是从提示中看到的,直接initdb会提示你 要清空原来文件夹或者新建。直接rm -rf *.initdb --help 可以看到字符编码的设定用--encoding ,initdb --encoding=UTF8 -D /usr/local/pgsql/data/ 启动postgresql,启动脚本/usr/local/etc/rc.d/postgresql。开始要添加到/etc/rc.conf文件,这个也是有提示的。 status not running,start成功 创建数据库,createdb --encoding=UTF-8 bt,使用客户端连接,qsql bt, 进去后 show server_encoding;查看server编码,utf8 \encoding 查看客户端编码。客户端还是SQL_ASCII,可以使用/encoding utf8改变客户端编码。 也可以直接使用\l查看。 ok了 基本没别的问题了。

Continue