存档

文章标签 ‘essay’

翻箱淘到的在线翻译脚本

2009年12月28日
Comments Off

偶尔清理我的个人可执行目录($HOME/.bin)发现了远古时代写的一个翻译脚本,牵出来遛了一遛,还可以用哈,嘿嘿,顺手给改了几下,添加了以下一些特性:

1) deamon 化(直接进后台了,不必老开着一个终端跑)
2) 三种显示方式:kdialog,notify-send 和 gnome-osd
3) 脚本名加 -k 参数剋掉后台进程

露脸一下:
dic_sh

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
 
# Name:     dic.sh
# Author:   xiooli <xioooli[at]yahoo.com.cn>
# Site:     http://joolix.com
# Licence:  GPLv3
# Version:  091228
 
timeout=10
 
trans() {
	str="`xsel`"
	while true ; do
	  a="`xsel`"
	  if [ "$a" != "$str" ] ; then
		str="$a"
		[ ${#a} -lt 15 ] && word="`w3m -dump -no-cookie http://dict.cn/mini.php?q="$a" \
		| sed -e '$d' -e 's/</ /g' -e 's/>/ /g'`"
		if [ "`which gnome-osd-client 2>/dev/null`" ]; then
			gnome-osd-client -f "<message id='word' osd_fake_translucent_bg='off' \
			osd_vposition='top' osd_halignment='right' animations='on' hide_timeout='10000'>\
			<span size='15000' foreground='pink'>`echo "$word"`</span></message>"
		elif [ "`which kdialog 2>/dev/null`" ]; then
			kdialog --passivepopup "$word" "${timeout:-5}" &>/dev/null
		elif [ "`which notify-send 2>/dev/null`" ]; then
			timeout=${timeout:-5}
			timeout=$((timeout*1000))
			notify-send -t "$timeout" "$word"
		fi
	  fi
	  sleep 1
	done
}
 
# daemonize
if [ "x$1" != "x--" -a "x$1" != "x-k"  -a "x$1" != "x-h" ]; then
	if [ ! "`cat /tmp/dic.pid 2>/dev/null`" ]; then
		"$0" -- 1> /dev/null 2> /dev/null &
		exit 0
	else
		echo "dic is running."
		exit 0
	fi
elif [ "x$1" = "x-k" ]; then
	pic_pid="`cat /tmp/dic.pid 2>/dev/null`"
	if [ "$pic_pid" ]; then
		kill -9 "$pic_pid" 2>/dev/null
		rm /tmp/dic.pid 2>/dev/null
		echo "dic process is terminated."
	else
		echo "no dic process is running."
	fi
	exit 0
elif [ "x$1" = "x-h" ]; then
	nm="`basename $0`"
	echo -e "$nm: run\n$nm -k: kill daemon\n$nm -h: show help"
	exit 0
fi
 
echo $$ > /tmp/dic.pid
trans

Script , , ,

shc “编译” bash 脚本的漏洞?

2009年12月28日

简介
shc 是一个能够将 bash 脚本“编译”成可执行程序的程序。
安装:
arch 下 yaourt -S shc 即可
用法:
shc -f your_script.sh

更详细的用法可以man之。运行之后会在当前目录下生成一个 your_cript.sh.c 的 c 源文件和一个 your_cript.sh.x 的可执行文件。

在 google 了 shc 之后发现很多童鞋用这个来加密自己的 bash 脚本,到底这个东东能不能加密你的脚本呢? 乍一看似乎是可以滴,但是经过 xiooli 童鞋摸啊捏阿的偶然发现这个东东的一个破绽,那就是,从 ps 的输出上是可以看到你脚本的源代码滴(连注释都不放过哦),下面来做个实验:
编写一个脚本:

1
2
3
4
5
cat test.sh
#!/bin/bash
# this is a test bash script
echo 'You can not see me.'
read anything

然后用 shc 将其编译成二进制程序:

shc -r -f test.sh

运行之:

./test.sh.x

另一个终端运行 ps:

1
2
3
4
ps -ef|grep test.sh.x
xiooli   24822 20812  0 00:46 pts/2    00:00:00 ./test.sh.x -c
#!/bin/bash?# this is a test bash script?echo 'You can not see me.'?read a
xiooli   24779 20416  0 00:35 pts/4    00:00:00 grep test.sh.x

哈哈,现原型了哦,试过了一个很复杂的 bash 脚本,仍然是能够看到那一大堆源码滴,虽然看起来有点乱,不过仔细瞧还是能瞧明白的,所以如果你要想用 shc 来加密你的 bash 脚本的话,还是早点打消这个念头吧。

Script , ,

pyinstaller 将 python 脚本打包成可执行程序

2009年12月27日

有些时候在需要将 python 写的程序部署到没有 python 运行环境的机器上的时候很麻烦,尤其是对方又不想安装 python 的时候更是如此,这时候将 python 脚本包装成可执行文件就是一个很好的解决方案。事实上有很多东西能做这个工作,常见的有 py2exe,freeze.py,pyinstaller 等,py2exe 貌似只支持 win,freeze.py 传说是将python 程序的字节码转换成 c 再编译的,这个我试了一下,转换命令行脚本时没啥问题,但是在转换一个简单的 pyqt 程序的时候,转换出来的程序不能正常运行。转向 pyinstaller, 这个就没问题了,在 linux 下和 win 下均能正确转换 pyqt 的程序。你可以在 http://www.pyinstaller.org/ 下载得到,按照 REDADME.txt 操作即可。

常用的参数(– 是两个 -):

–onefile 打包成单一文件

–onedir 制作出的文件放在同一个目录下(默认值)

–tk 包含TCL/TK的相关文件。

–windowed 制作窗口程序。(程序执行时不会有文字窗口出现,仅限 windows)

–console 制作一般的console程序。

–upx 使用UPX压缩程序。

–icon= 指定程序的图标(貌似我没有弄成功)。

–version= 指定程序的版本信息(信息写在 FILE 里面)。

–name= 指定程序的名称。若无此选项,则使用主脚本的名称。

为方便使用,我写了一个小 bash 脚本(pyinstaller.sh),用法:
pyinstaller.sh /path/to/your_script.py
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
 
# Name:     pyinstaller.sh
# Author:   xiooli <xioooli[at]yahoo.com.cn>
# Site:     http://joolix.com
# Licence:  GPLv3
# Version:  091227
 
pyinstaller_path="/home/xiooli/Projects/pinstaller/trunk"
makespec="$pyinstaller_path/Makespec.py"
build="$pyinstaller_path/Build.py"
 
if [ "$1" ]; then
	app="`basename $1`"
	spec_dir=${app/.*}
	[ -d "$spec_dir" ] || mkdir -p "$spec_dir"
	read -p "输入额外参数:" arg
	python "$makespec" -c -o "$spec_dir" $arg $1
	python "$build" "$spec_dir/$spec_dir.spec"
fi

ps: 在 win 下弄出的程序咋要比 linux 下的小呢,囧。

Script , ,

Firefox下直接观看PPS看看

2009年10月16日
Comments Off

ubuntu论坛牛人写了pps的totem插件,可以用于观看pps的节目,具体安装方法debian系的参考http://forum.ubuntu.org.cn/viewtopic.php?f=74&t=223582
archlinux用以下命令即可安装:

yaourt -S libppswrapper-git gst-plugins-pps-git totem-pps-git libpps gst-plugins-sopcast-git totem-sopcast-git

但是这样只可以在totem的窗口里面看,当然也可以点击pps看看节目右边的客户端播放,然后将其关联到totem,但是总离不了一个独立的totem窗口,于是我们的 Hello World 童鞋在自我需求的推动下写了一个greasemonkey脚本,让其可直接在frefox的窗口下播放pps看看(当然是调用totem-pps的)。

要正常使用这个油猴脚本,你需要满足几个基本条件:
1) 能正常使用的totem-pps
2) totem-plugin(arch下的包名字,其他distro.里面自己找找吧)
3) firefox 安装并启用 greasemonkey

一切就绪以后你就可以去pps上面踢馆咯,哈哈!

greasemonkey 脚本从这里下载:http://forum.ubuntu.org.cn/download/file.php?id=80735,解压后拖到firefox的窗口里面进行安装。

秀图一张:
pps-in-ff

Script , , , ,

鼓捣 bash cgi

2009年9月1日
Comments Off

看了骨头的博文:Bash其实也可以做CGI用 也按捺不住,尝试了一把,呵呵,其他语言搞不定,bash 还是玩的转滴。

在自己电脑上面用 lighttpd 搭建了个 webserver,配置了一下,将 /etc/lighttpd.d/lighttpd.conf 里面 mod_cgi 前面的注释去掉,需要注意的是,如果你要使用 .sh 结尾的 cgi 脚本,那么需要将这行改成

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".sh" )

并在 cgi.assign 段添加一个

".sh" => "/bin/bash"

,写一个小脚本测试了一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
 
get_args() {
	local arg_txt arg
	arg_txt="$QUERY_STRING"
	for arg in `echo "$arg_txt"|tr "&" " "`; do
		arg="$(echo $arg|sed "s/%20/ /g"|ascii2uni -a J 2>/dev/null)"
		ARGS="${ARGS} $(echo $arg|sed "s/=.*$//")"
		export "$arg"
	done
}
 
echo "Content-type: text/html"
 
echo
 
echo "<HTML><HEAD>"
echo "<TITLE>Bash CGI writen by Xiooli?</TITLE>"
get_args
echo "</HEAD><BODY>"
 
echo "<B> This is XIOOLI's bash cgi </B>"
echo "<P>"
eval "$cmd"|sed "s/$/<P>/g"
for i in $ARGS; do
	echo "<P> $i=`eval echo \\$$i`"
done
echo "</BODY></HTML>"

来一个测试,url 如下: http://localhost/cgi-bin/tst.sh?hello=xiooli%E5%93%A5%E5%93%A5&kk=yy&bb=pp&cmd=who
得到结果:

This is XIOOLI’s bash cgi

xiooli :0 Aug 31 09:07

xiooli pts/0 Aug 31 09:07 (:0)

hello=xiooli哥哥

kk=yy

bb=pp

cmd=who

呵呵,好玩滴咯,以后写 cgi 就用 bash 鸟 ^^

Script ,

关于版本号

2009年8月7日
Comments Off

设想系统的主版本号用年数表示,软件包(app模块)的版本号就用其中最主要程序的版本号,命名规则是前面加上表示优先级的数字(3位)-接模块名_接版本号.app。

例如:

将发布的 joolix 版本就定为: joolix 2009
今天压制的软件包比如 kdemod-kdemultimedia-juk 就是 00x-kdemod-kdemultimedia-juk_4.3.0-3.app, 或者觉得长的话就省掉中间的,成为 00x-kdemod-juk_4.3.0-3.app

还有关于版本昵称,采用同 ubuntu 相同的命名策略,joolix 2009 就叫 Crazy Crab

大家觉得怎么样阿?

Joolix ,

新版 JOOLIX 的进展

2009年8月5日
Comments Off

现在还在进行基础性的制作,进展如下:

1) 基本系统

基本系统的模块已经做好了,只是稍微有点大(96.3 M),还有很大的精简余地。

2) initrd.gz 和 vmlinuz

重新制作了initrd.gz(以前是直接用的从slax那里下载的内核),采用了最新的内核 2.6.30-ARCH,借鉴了 larch 的 hook 插入方式,用普通的 mkinitcpio 法制作 initrd.gz,不再需要给内核打补丁和重新编译(因为是软件模块是用的 squashfs 格式而不是 slax 的 squashfs-lzma 格式压缩,而 squashfs 是已经进入了内核的)。所插入的两个 hook 是基于 larch 的 larch1 和 larch3, 几乎重写。呵呵,写这个东西真的很累,但是也能学到东西哦。

现在 initrd.gz 的制作几乎和发行版无关了(虽然没实验过,不过从脚本来看确实是这样的),只有系统上有 mkinitcpio 就可以制作,不必给内核打补丁和重新编译内核。

3) 模块制作环境

上回书写到想写一个创建模块的工作环境,现在也已经完成了,不过有一点和以前想的不太一样,就是大小问题,必须要依赖一个基本系统的模块(或其他你要制备的模块想要依赖的软件模块),也就是说如果想在基本系统(就是最小的那个命令行系统)制备软件的话就必须要有这个基本系统的模块才行。除却这个问题以外还基本完美,制备出来的软件模块应该就可以直接用并且很干净,还有就是这个工作环境也是发行版无关的,只要你的 linux 系统支持 squashfs 和 aufs 就可以。

其原理是将以 squashfs 格式压缩的基本系统模块挂载到一个目录 A,这个是只读的,另外还有几个目录,比如 B 是用来保存变化后的文件的,还有一个 fackroot 目录和一个目录 C 用来记录你不想压制到软件模块里面的数据。

用 aufs 挂载这几个目录,其挂载方式如下:

mount -t aufs br:B=rw:A aufs ./fackroot

这样所有的变化都会保存在可读写分支 B 里面,然后将不想要压入模块的目录比如 /var/lib/pacman/sync 绑定到目录 C, 将 /sys, /proc, /dev 等绑定到 ./fackroot 下的同名目录,然后 chroot 到 ./fackroot 就可以在里面安装软件了,最后将所有的东西卸载掉,所安装软件的文件就只存在于 B 目录了,然后将 B 目录整个压制成模块就可以了,哈哈,是不是很聪明阿。

接下来的工作就是精简基本系统,然后就是实现上回所说的那另外几项东西了。



Joolix ,

新版 JOOLIX 的计划

2009年8月1日

RT
joolix 8.04.1-1 已然有些陈旧了,是时候推出新版本了,在这里写些关于新版本的计划和目标,各位童鞋有什么建议的话请跟评论提出哈。

计划:

1) 基于 archlinux 构建
理由:8.04 是基于的 ubuntu jeos,优点是基本系统很小,但是我对 debian 系 linux 的系统配置不熟悉,arch 的系统配置非常简单,且针对 i686 优化,速度上可能会快些,包管理强大简洁,kdemod稳定等等,最主要的原因是配置简洁。现在基本系统已经差不多做好了,除了内核外其他软件均为当前最新版本。

2) 实现模块最小依赖

让模块尽量不依赖其他模块,仅仅一两个基本模块。比如 kde 软件就最多依赖 kdebase(内含qt库和kde runtime之类的东西) 。

3) 实现软件的拖放安装/卸载

建立一个特殊的目录,模块(或可以看作软件安装包)拖放到此目录即完成安装,从其中拖出即完成卸载,至少从视觉上实现所谓“绿色软件”

4) 添加安装到硬盘的功能

让 joolix 不仅能在光盘和 u 盘上使用,还能容易的安装到硬盘。设想能安装到 win 分区或 linux 分区而不破坏原有系统,或新划分区像普通 linux 那样安装。安装过后的系统仍然支持以拖放的方式安装软件。

5) 写一个创建模块的工作环境

设想使用 aufs 和 chroot 来达到此目的,整个环境可以不依赖真实的 joolix 系统,在任何支持 aufs 的 linux 系统上均可创建 joolix 模块,体积不必很大, chroot 里面的命令计划用 busybox (不知道这些命令够用不) 加一些必须的程序。

使用这个环境主要是因为有些程序安装的时候会执行一些脚本,如果仅仅将这个程序压成模块的话有些步骤就不会进行,而在一个虚拟的环境下先将这些程序安装上,那它安装的整个过程都是走完了的,这样的话可能会比较少出问题。

有了这个环境,大家就可以方便的自己创建 joolix 模块了。

6) 桌面环境用 kde4.3

用 arch 的 kdemod 可以很方便的取舍不想要的 kde 软件,最终搭建一个华丽的桌面环境,当然可能会有点大,但是现在谁家的 u 盘不是好几个 G 的呢。当然也可能会创建几个轻量级的桌面环境。

以上就是我的一点想法和计划,大家有什么意见和建议的请踊跃提出哈。

Joolix , ,

捍卫打酱油的权利

2009年7月20日
Comments Off

在 picasa 就义了以后,我的博客迎来了黑白世界,所有的图片均无法显示,鉴于 GFW 剥夺了如此一个手无缚鸡之力的人的打酱油的权利,我被迫只有冒着跨省追捕的危险拖着两条羸弱的腿做贼似的和墙做艰苦卓绝的斗争。

依然是域名劫持,洋葱速度很慢。就改hosts咯,为防忘记在此记录。
添加下面文字到/etc/hosts

203.208.39.104 picadaweb.google.com
203.208.39.104 lh1.ggpht.com
203.208.39.104 lh2.ggpht.com
203.208.39.104 lh3.ggpht.com
203.208.39.104 lh4.ggpht.com
203.208.39.104 lh5.ggpht.com
203.208.39.104 lh6.ggpht.com

如此,在我的机器上就可以看 picasa 的图片了,虽然可能其他人不能看见,那我也顾不着了,先掩耳盗铃一把吧~~~~~~~~~

我闭上眼睛,看不见墙,楚门的世界里,我又可以快乐的打酱油了。

Other

lrcdis的标题模式真的很棒哦

2009年3月15日

RT
可以边干活边看歌词,不用怕被挡住!

发件人 xiooli

Lrcdis ,