Posts in category linux

We are back ! - 现在 thinkbase.net 运行在 Docker 之上

PortableTrac 已经支持 Linux(从 https://github.com/thinkbase/PortableTrac/commit/bc2702cc9ed56f566a43b9d00137ae81dafdb395 开始),于是 http://thinkbase.net 终于迁移到 Linux 上,并且使用 Docker 来进行运行环境。

基于 Docker 容器技术,要运行 thinkbase.net 的 Trac 系统只需要如下简单的几步即可:

  1. 在服务器上安装 docker:
    # 安装 docker.io
    sudo apt-get install docker.io
    
    # 将当前用户加入 docker 组,以便非 root 用户也可以使用 docker
    sudo gpasswd -a ${USER} docker
    sudo service docker restart
    
  1. 从 github 获取相关的 Dockerfile,构建运行镜像
    # [运行目录: ~/github$] - 获取需要的 Dockerfile 定义
    git clone -v --progress https://github.com/thinkbase/Dockerfiles
    
    # [运行目录: ~/github/Dockerfiles/01-init/01-ubuntu14.04$] - 构建基于 ubuntu 的基础镜像
    docker build --force-rm -t ubuntu:14.04-sshd .
    
    # [运行目录: ~/github/Dockerfiles/90-servers/trac-thinkbase.net$] - 构建 thinkbase.net trac 镜像
    docker build --force-rm -t trac-thinkbase.net:1.0 .
    
  1. 下面就可以创建容器并运行了:
    docker run -d -p 80:8080 -v ~/trac/private:/private --name trac-tk trac-thinkbase.net:1.0
    

Linux shell 之计算圆周率

http://blog.devep.net/virushuo/2014/01/21/delllinux_kernel_bugcpu.html (Dell服务器和Linux kernel bug造成的CPU性能下降问题) 看到的,本意是通过计算圆周率确认服务器的CPU性能,只需要如下简单的一行命令:

time echo "scale=5000; 4*a(1)" | bc -l -q

在我的笔记本上执行的情况如下:

3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660631558817488152092096282925\
40917153643678925903600113305305488204665213841469519415116094330572\
70365759591953092186117381932611793105118548074462379962749567351885\
75272489122793818301194912983367336244065664308602139494639522473719\
07021798609437027705392171762931767523846748184676694051320005681271\
45263560827785771342757789609173637178721468440901224953430146549585\
37105079227968925892354201995611212902196086403441815981362977477130\
99605187072113499999983729780499510597317328160963185950244594553469\
08302642522308253344685035261931188171010003137838752886587533208381\
42061717766914730359825349042875546873115956286388235378759375195778\
18577805321712268066130019278766111959092164201989380952572010654858\
63278865936153381827968230301952035301852968995773622599413891249721\
77528347913151557485724245415069595082953311686172785588907509838175\
46374649393192550604009277016711390098488240128583616035637076601047\
10181942955596198946767837449448255379774726847104047534646208046684\
25906949129331367702898915210475216205696602405803815019351125338243\
00355876402474964732639141992726042699227967823547816360093417216412\
19924586315030286182974555706749838505494588586926995690927210797509\
30295532116534498720275596023648066549911988183479775356636980742654\
25278625518184175746728909777727938000816470600161452491921732172147\
72350141441973568548161361157352552133475741849468438523323907394143\
33454776241686251898356948556209921922218427255025425688767179049460\
16534668049886272327917860857843838279679766814541009538837863609506\
80064225125205117392984896084128488626945604241965285022210661186306\
74427862203919494504712371378696095636437191728746776465757396241389\
08658326459958133904780275900994657640789512694683983525957098258226\
20522489407726719478268482601476990902640136394437455305068203496252\
45174939965143142980919065925093722169646151570985838741059788595977\
29754989301617539284681382686838689427741559918559252459539594310499\
72524680845987273644695848653836736222626099124608051243884390451244\
13654976278079771569143599770012961608944169486855584840635342207222\
58284886481584560285060168427394522674676788952521385225499546667278\
23986456596116354886230577456498035593634568174324112515076069479451\
09659609402522887971089314566913686722874894056010150330861792868092\
08747609178249385890097149096759852613655497818931297848216829989487\
22658804857564014270477555132379641451523746234364542858444795265867\
82105114135473573952311342716610213596953623144295248493718711014576\
54035902799344037420073105785390621983874478084784896833214457138687\
51943506430218453191048481005370614680674919278191197939952061419663\
42875444064374512371819217999839101591956181467514269123974894090718\
64942319615679452080951465502252316038819301420937621378559566389377\
87083039069792077346722182562599661501421503068038447734549202605414\
66592520149744285073251866600213243408819071048633173464965145390579\
62685610055081066587969981635747363840525714591028970641401109712062\
80439039759515677157700420337869936007230558763176359421873125147120\
53292819182618612586732157919841484882916447060957527069572209175671\
16722910981690915280173506712748583222871835209353965725121083579151\
36988209144421006751033467110314126711136990865851639831501970165151\
16851714376576183515565088490998985998238734552833163550764791853589\
32261854896321329330898570642046752590709154814165498594616371802709\
81994309924488957571282890592323326097299712084433573265489382391193\
25974636673058360414281388303203824903758985243744170291327656180937\
73444030707469211201913020330380197621101100449293215160842444859637\
66983895228684783123552658213144957685726243344189303968642624341077\
32269780280731891544110104468232527162010526522721116603966655730925\
47110557853763466820653109896526918620564769312570586356620185581007\
29360659876486117910453348850346113657686753249441668039626579787718\
55608455296541266540853061434443185867697514566140680070023787765913\
44017127494704205622305389945613140711270004078547332699390814546646\
45880797270826683063432858785698305235808933065757406795457163775254\
20211495576158140025012622859413021647155097925923099079654737612551\
76567513575178296664547791745011299614890304639947132962107340437518\
95735961458901938971311179042978285647503203198691514028708085990480\
10941214722131794764777262241425485454033215718530614228813758504306\
33217518297986622371721591607716692547487389866549494501146540628433\
66393790039769265672146385306736096571209180763832716641627488880078\
69256029022847210403172118608204190004229661711963779213375751149595\
01566049631862947265473642523081770367515906735023507283540567040386\
74351362222477158915049530984448933309634087807693259939780541934144\
73774418426312986080998886874132604720

real	0m21.420s
user	0m21.397s
sys	0m0.001s

Linux shell 获得当前脚本文件所在的目录

这基本上是一个非常常见的需求,不过考虑到兼容性: 1)目录或者文件名中空格;2)对通过link的形式引用;3)通过. ./test.sh这样的方式调用,要做出一个比较完美的方案也不是那么容易。

首先看看主流的做法:

另外一个来源:

  • http://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-bash-script-find-what-directory-itsstoredin/
    #!/bin/bash
    # Name: /tmp/demo.bash : 
    # Purpose: Tell in what directory $0 is stored in
    # Warning: Not tested for portability 
    # ------------------------------------------------
     
    ## who am i? ##
    _script="$(readlink -f ${BASH_SOURCE[0]})"
     
    ## Delete last component from $_script ##
    _base="$(dirname $_script)"
     
    ## Okay, print it ##
    echo "Script name : $_script"
    echo "Current working dir : $PWD"
    echo "Script location path (dir) : $_base"
    
  • 这个脚本只支持 bash,经测试,对空格的支持存在问题。

考虑实际情况(总是在 bash 下面),对上面脚本修改一下,我最终使用的方案是:

#!/bin/bash

if [ -z $BASH ]; then
    echo "This shell script MUST run under bash."
    exit /b -1
fi
_script="$(readlink -f "${BASH_SOURCE[0]}")"
_script_dir="$(dirname "$_script")"
echo "Directory portion of $_script : $_script_dir"

Linux 卡死怎么办

摘自 http://forum.ubuntu.org.cn/viewtopic.php?f=15&t=450926

  • Ctrl-Alt-F1 切换到 TTY1 ;
    • 如果你用的是常规版ubuntu,setsid unity重启下unity基本就解决了
  • Ctrl-Alt-Backspace 关闭 X Server;
  • Alt-SysRq + R、E、I、S、U、B 无敌 reisub
    R:unRaw     将键盘从X Server抢回来
    E:tErminate 给除INIT外的所有进程发送 SIGTERM 信号
    I:kIll      给除INIT外的所有进程发送 SIGKILL 信号
    S:Sync      将所有数据同步至磁盘
    U:Unmount   将所有分区挂载为只读模式
    R:reBoot    重启
    O:shutdOwn  关机
    

PortableTrac 类似的系统

通过对比选择最佳开源的基于Web的项目管理工具 看到:

Trac 目前还无法同时管理多个项目,但如果作为一个单一项目的管理工具,它是一个很好的选择。大家可以使用 BitNamiTurnkey virtual appliance

发现这两个项目和现在 PortableTrac 的目标比较接近:

  • http://bitnami.com/stack/trac
    • 提供了一键安装的 Trac 安装程序和虚拟机映像,甚至还包括在上部署 Trac 服务器。
    • 提供了 Windows、Linux 和 OS X 上的安装程序;
  • http://www.turnkeylinux.org/trac
    • TurnKey Linux是基于Ubuntu的虚拟应用程序库,它将一些最好的开放源码软件集成到完备可用的解决方案中。每一个虚拟应用程序都为易用性进行了优化,并能 在数分钟内就部署在裸机、虚拟机及云中,每一个虚拟应用都可以光盘镜像或是虚拟机镜像的形式获得(来自 http://baike.baidu.com/view/9300243.htm )。

CentOS 6.0 虚拟机安装日志(截屏)(补 20111203)

在虚拟机中安装 CentOS 6.0

从 DVD1 iso 文件启动


安装开始界面


开始安装





















磁盘分区










选择"最小桌面"安装方式










安装完成, 重启







安装后的设置步骤

基本设置项目






Kdump 无法启用



进入系统




设置网络








虚拟机安装结束


重启, 检查更新













































安装 gcc 和内核头文件等










安装 vmware-tools

尝试


系统安装时已自带 vmware-tools


安装 telnet 命令






验证 sshd 已安装


安装 svn (客户端)








安装 7-zip 支持

































防火墙(iptables)设置








END

Linux 下定期屏幕截屏脚本(补 20111120)

原文来自 https://code.google.com/p/thinkbasenet/wiki/20111120_ScreenRecorderShellInLinux

概述

在上一篇 Windows 和 Linux 下定期屏幕截屏的方法 中提到了可以使用 ImageMagickimport 命令完成截屏过程, 本文基于 import 命令, 提供两个脚本, 分别用于定期截取当前活动窗口, 以及定期截取指定窗口;

脚本

主要技术说明

import 命令

  • -screen 参数: 不了解 X 的细节, 猜测对于一个典型的 X 窗口, 其中的工具提示、菜单等其实是有独立的 window id 的, 那么在指定 window id 截屏时, 可能是截取不到这些内容的, 使用 -screen 参数可以解决这个问题:
    • 没有 -screen 参数时的内容:
    • 加上 -screen 参数:

取得窗口的 window id 和 process id

  1. 获取当前活动窗口的 window id:
    • xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5
  2. 使用 xwininfo 选择一个窗口并获取其 window id:
    • xwininfo | grep "xwininfo: Window id:" | cut -d ' ' -f 4
  3. 获取窗口($WIN_ID)对应的进程 ID:
    • xprop -id $WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3

比较截屏文件是否一致

  • 使用 cmp 命令即可.

END

Windows 和 Linux 下定期屏幕截屏的方法(补 20101114)

原文来自 https://code.google.com/p/thinkbasenet/wiki/20101114_ScreenShotAsFilesInWindowsAndLinux

截屏并存储到文件的方法, 主要是可以用于录制操作视频, 或者日志重要系统操作过程, 以及测试过程等.

简介

一直以来使用 Wink 作为屏幕录制的首选软件, 但是 Wink 存在一个很麻烦的问题, 就是在录制途中, 所有的屏幕截屏都存储在内存里, 因此在很长时间的操作中, 往往会造成内存溢出, 导致前功尽弃.

有一个想法是写一个录制屏幕并且及时存储到图片文件的软件, 最初的想法是使用 Java 来写, 但是一直都没有开始; 今天无意中看到了 nircmd 这个软件, 其中的命令 savescreenshot 可以较好的完成这个要求:

nircmdc.exe loop 1000 2000 savescreenshot c:\temp\scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png 

loop 1000 2000 代表循环 1000 次, 间隔时间 2 秒(2000 毫秒);

使用 nircmdc 可以保证 1000 次循环完成之前, 命令行一直停留在这个命令上, 方便不需要的时候使用 Ctrl-C 结束截屏过程;

另外还可以使用 savescreenshotwin 命令保存当前活动窗口的命令;

Linux 下的处理方法

使用 nircmdc 可以在 Windows 下实现定时截屏的要求, 但是在 Linux 下又如何实现呢? 经过一番搜索, 大致的解决方案如下:

  1. 基于 ImageMagick, 使用其 import 命令完成截屏过程, 基本语法为:
    import -window <Window ID> <FileName>.png
    
  2. 如果需要截取整个屏幕, 可以使用 root 作为 Window ID, 例如:
    import -window root MyScreenshot3.png
    
  3. 如何实现截取当前活动窗口呢? 可以使用如下命令得到当前活动窗口 ID:
    xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5
    
  4. 20111120 添加 - Linux 下定期屏幕截屏脚本;

下载

其它

  1. 减少文件大小
    • 如果屏幕内容一直不变, 那么就会出现重复录取同一个画面的情况, 应该可以通过一个脚本使用 md5sum 等命令检查两张图片是否完全一样, 删除重复内容的图片, 这样就可以实现减少文件大小的目的了.

参考资料

  1. http://tips.webdesign10.com/how-to-take-a-screenshot-on-ubuntu-linux
    • "How to Take a Screenshot in Linux (Ubuntu)", 描述了在 Ubuntu 上几种截屏的方法;
  2. http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html
    • "我的ImageMagick使用心得", ImageMagick 的中文介绍;
  3. http://www.ruby-forum.com/topic/165740#728314
    • "Title from current active window", Ruby-Gnome 2 论坛的讨论;

END

常用的 PuTTY 和 WinSCP 设置

现在的 Linux 服务器一般都是使用 UTF-8 作为文件系统编码, 同时开放 SSH 供远程访问, 这种情况下, PuTTYWinSCP 就是很有用的 SSH 客户端, 但是默认情况下它们的配置不够合理, 包括会出现 Linux 系统中的中文文件名显示为乱码等现象, 针对这些问题, 需要进行的设置调整如下.

PuTTY

  1. 设置 PuTTY 使用 UTF-8 编码访问服务器, 解决 ls 等命令看到中文文件名是乱码的现象:
    ;
  2. 设置 PuTTY 的 "选中内容鼠标右键处理". 此项设置也非常重要, 因为默认情况下 PuTTY 的处理是 "复制到剪贴板 + 粘贴", 如果万一选中的是多行, 在 shell 中右键操作往往会造成粘贴多行字符串, shell 会当作多个命令去执行, 很容易发生执行错误命令的危险!
  3. 增加 PuTTY 的回滚行数. 默认情况下 PuTTY 的回滚行数很小, 在程序输出大量信息的情况下, 经常会无法看全程序输出的信息, 为此需要把这个行数设大:

WinSCP

  • WinSCP 中将 文件名UTF-8编码 开启就可以解决中文文件名乱码的问题:

补充说明

在 PuTTY 中, 如果在针对打开后的 "Default Settings" 进行设置修改并保存, 那么这些修改就可以作为默认设置保留下来.

END