debian 修改默认SHELL及彩色终端

1.debian 修改默认 SHELL ( dash 改 为bash )
debian 默认shell为 dash ,对于常用bash来说的我,不习惯,改之,如下
evan@latop:~$ cat /etc/passwd | grep evan
evan:x:1000:1001::/home/evan:/bin/bash
sudo mv /bin/sh /bin/baksh && sudo ln -s /bin/bash /bin/sh

2. 终端彩色和一些常用alias
终端彩色 这个太多了,其实觉得我下面这个就够了
cp /etc/skel/.bashrc ~/ && . /root/.bashrc

evan@latop:~$ cat .bashrc
alias halt='sudo poweroff'
export LANG=zh_CN.utf8
alias vi=vim
#alias firefox=iceweasel
alias firefox=/home/evan/program/firefox/firefox
alias thunderbird=icedove
alias ll='ls -l'
alias ifconfig='/sbin/ifconfig'
alias eclipse='/home/evan/program/eclipse/eclipse'
alias pssh='parallel-ssh'
alias pscp='parallel-scp'
alias prsync='parallel-rsync'

export PSSH_HOSTS="/root/servers.txt"
export PSSH_USER="root"
export PSSH_PAR="32"
export PSSH_OUTDIR="/tmp"
export PSSH_VERBOSE="0"
export PSSH_OPTIONS="UserKnownHostsFile /root/.ssh/known_hosts"

# by evan
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi

if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'

#alias grep='grep --color=auto'
#alias fgrep='fgrep --color=auto'
#alias egrep='egrep --color=auto'
fi

你可能不知道的穆斯林

绝大多数的穆斯林属于逊尼派(粗略占穆斯林的85%)或什叶派(粗略占穆斯林的15%)两大派别,另外两派中均有人同时信仰伊斯兰神秘主义。伊斯兰教是中东、非洲的大部分及亚洲主要部分的主流宗教。在中国、俄罗斯及加勒比地区都可找到庞大的穆斯林社群。有最多穆斯林的国家是印度尼西亚,占全球穆斯林总数的15%。30%的穆斯林都位于南亚,20%的穆斯林在阿拉伯国家。改信伊斯兰教的人及穆斯林移民几乎可在世界的每个角落都可找到。

http://zh.wikipedia.org/zh-cn/%E4%BC%8A%E6%96%AF%E5%85%B0%E6%95%99

Kindle Reader — kpw RSS 订阅

Question:
一直在纠结,现在怎样在kpw 上用rss呢 以前的狗耳朵什么的都收费了呢, 找了n久,终于找到个办法了,还好,哥的vps又发挥更大的作用了

Solve:
#使用说明详细情况

不再依赖Google Reader的Kindle Reader

 Linux用户使用方法(桌面用户/VPS用户)

1.下载最新版本的v0.6.5
2.解压后,只保留lib目录和kindlereader.py和config.sample.ini两个文件,其他文件都不需要
3.将config.sample.ini改名为config.ini,并修改其中的内容,请参考上一段对windows用户的解释
4.Linux用户特有的选项:grayscale,将其设为1可以让mobi文件更小一点,效果一般,必须要安装python的pillow库
5.尽量确保你的python版本为2.7,其他版本均未测试。如果默认版本不是2.7,最好单独安装一个,方法可以参考下一段针对虚拟主机用户的说明
6.下载下载亚马逊官方的mobi生成工具kindlegen,http://s3.amazonaws.com/kindlegen/kindlegen_linux_2.6_i386_v2_8.tar.gz 解压后只需要kindlegen一个文件,跟kindlereader.py和config.ini放在同一个目录下
7.运行python kindlereader.py即可,可以通过crontab定期运行,脚本可以参考下一段

  Linux用户使用方法(虚拟主机用户,以Hostmonster为例)

如果你的系统默认python版本就是2.7(运行python,查看显示的版本),那么使用方法完全和上面桌面/VPS用户一样
如果你系统默认的python不是2.7版本,请按照下面的说明安装2.7版本的python
修改~/.bash_profile文件,确保文件中有以下内容(如已有某行,不用再写这一行)
PATH=$HOME/bin:$PATH
LD_LIBRARY_PATH=$HOME/lib/
export PATH
export LD_LIBRARY_PATH
安装python
$ wget http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz
$ tar -xvfz Python-2.7.4.tgz
$ cd Python-2.7.4
$ ./configure –prefix $HOME
$ make install
确保kindlereader.py和config.ini、kindlegen和lib目录都存在的情况下,运行~/bin/python kindlereader.py即可
可以使用脚本以便cron来运行,假设你的家目录是/home1/xxx/,你将kindlereader.py、kindlegen和config.ini存放在/home1/xxx/kindle/下面,那么写一个kindle.sh放在同一目录下
#!/bin/sh
cd /home1/xxx/kindle/
/home1/xxx/bin/python kindlereader.py
在虚拟主机控制面板里的“时钟守护作业”中填入/home1/xxx/kindle/kindle.sh,我选的运行频率是0 15 */3 * *,即每三天运行一次,在主机时间的每天15点。
顺便可以再做一个cron任务,用于清理生成的data目录,填入rm -rf /home1/xxx/kindle/data/ 即可,频率和上面一样,但时间要推迟一点,比如0 16 */3 * *
  
  

 ps 我的配置文件里面的一些要手工改的地方
; 发件人,请使用亚马逊注册邮箱,或你的”Your Kindle’s approved email list”中的其他邮箱
from = 36lovelove@gmail.com

; 亚马逊提供的投递邮箱地址,注意 @free.kindle.com只能投递到wifi, @kindle.com可以投递到3G但要收费
; 非3G版kindle用户请使用@kindle.com邮箱,不收费
; 也可以填写一个其他邮箱地址,由该邮箱转发到你的kindle邮箱地址
;to = name@kindle.com
to = 36love_3xxx@kindle.cn

; smtp服务器需要认证时请填写下面两项,任何一项不填写则认为你的smtp服务器不需要认证
username = 36lovelove
password = xxxx

[feeds]
; 需抓取的Feed列表,请输入包含协议名的完整地址(如http://www.a.com/rss/)
; 请给每个feed加上数字编号,如feed1、feed2等
; 如果需要强制输出全文rss,请在完整的URL地址前加入”full”(如fullhttp://www.a.com/rss/)
; 强制全文输出会较为缓慢,且存在不能读取或解析不正确的情况,这时请除去该feed前的”full”
; 如果配置文件中写入的所有feed都不能被全文读取,而你又在中国大陆,有可能是其中一个feed被墙导致的,这时请除去该feed前的”full”
feed1=fullhttp://rss.sina.com.cn/tech/rollnews.xml

***** 使用过程 **********

在自己的laptop 是试过是ok的 加上果什么的 5.4 M感觉体积有点大了

[root@vps kindlereader]# crontab -l
#4 kpw rss
* 08 * * * python /data/kindlereader/kindlereader.py >/dev/null 2>&1
#32 08 * * * /data/kindlereader/runkread >/dev/null 2>&1
32 16 * * * /data/kindlereader/rmlog >/dev/null 2>&1

[root@vps kindlereader]# cat /data/kindlereader/rmlog
#!/bin/bash
cd /data/kindlereader/ && /bin/rm -rf data/

[root@vps kindlereader]# cat runkread
#!/bin/bash
#python /home/evan/program/kindlereader/kindlereader.py
cd /data/kindlereader/
python kindlereader.py

evan@latop:~/program/kindlereader$ /home/evan/program/kindlereader/runkread
07-06 16:06:593 INFO welcome, start …
07-06 16:06:593 INFO [1/2]:http://www.cnbeta.com/rss
07-06 16:06:593 INFO [2/2]:
07-06 16:06:597 ERROR error(): string index out of range , retry
07-06 16:06:598 ERROR fail(): string index out of range
07-06 16:06:598 ERROR fail:():illegal feed:
07-06 16:06:425 INFO from feed1 update 10 items.
07-06 16:06:425 INFO generate .mobi file start…
Found SRCS section number 10, and count 2
beginning at offset 5278 and ending at offset 29d0
done
07-06 16:06:628 INFO .mobi save as: /home/evan/program/kindlereader/data/KindleReader-20140706-160652.mobi(40KB)
07-06 16:06:628 INFO send mail to 36love_35@kindle.cn …
07-06 16:07:962 INFO used time 14.3690559864s
07-06 16:07:963 INFO done.

从源码开始(Hello World) 制作deb包

1. create 一个目录 如下
mkdir hello
2. c 源码如下
root@evan-pc:~/deb# cat hello.c
#include
int main(int argc, char* argv[])
{
printf("Hello world!\n");
return 0;
}

root@evan-pc:~/deb# cat Makefile
OBJS=hello.o
CC=gcc -g
all:$(OBJS)
$(CC) -o hello $(OBJS)
clean:
rm -f *.o hello
.PHONY:all clean

3. 我们make一下,测试程序编译是否有问题,然后在./hello检查程序是否正确执行.如果没问题进行下一步,如果有问题我们检查程序代码
root@evan-pc:~/deb# make
gcc -g -c -o hello.o hello.c
gcc -g -o hello hello.o

4、我们清理下刚才编译程序的垃圾,make clean一下
make clean
5、输入命令,切回上级目录
cd ..
6、 改名:因为文件名必须包含文件名还有版本号
mv hello hello-1.0
说明:文件名后必须用-,不能用_
tar zcvf hello_1.0.tar.gz hello-1.0
cd hello-1.0

root@evan-pc:~/hello-1.0# dh_make -e evan886@gmail.com -f ../hello_1.0.tar.gz

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
[s/i/m/l/k/n] s

Maintainer name : root
Email-Address : evan886@gmail.com
Date : Thu, 10 Jul 2014 16:25:54 +0800
Package Name : hello
Version : 1.0
License : blank
Type of Package : Single
Hit to confirm:
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the hello Makefiles install into $DESTDIR and not in / .

#tar zcvf hello_1.0.orig.tar.gz hello-1.0
说明:压缩包的名字必须是包含文件名及版本号
7、开始打包
root@evan-pc:~/hello-1.0# dpkg-buildpackage
dpkg-buildpackage: 源码包 hello
dpkg-buildpackage: 源码版本 1.0-1
dpkg-buildpackage: source distribution unstable
dpkg-buildpackage: 源码修改者 root
dpkg-buildpackage: 主机架构 amd64
dpkg-source –before-build hello-1.0
debian/rules clean
dh clean
dh_testdir
dh_auto_clean
make[1]: 正在进入目录 `/root/hello-1.0′
rm -f *.o hello
make[1]:正在离开目录 `/root/hello-1.0′
dh_clean
dpkg-source -b hello-1.0
dpkg-source: info: using source format `3.0 (quilt)’
dpkg-source: info: building hello using existing ./hello_1.0.orig.tar.gz
dpkg-source: 警告: 忽略对文件 hello.o 的删除指令
dpkg-source: 警告: 忽略对文件 hello 的删除指令
dpkg-source: info: building hello in hello_1.0-1.debian.tar.gz
dpkg-source: info: building hello in hello_1.0-1.dsc
debian/rules build
dh build
dh_testdir
dh_auto_configure
dh_auto_build
make[1]: 正在进入目录 `/root/hello-1.0′
gcc -g -g -O2 -fstack-protector –param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -c -o hello.o hello.c
gcc -g -o hello hello.o
make[1]:正在离开目录 `/root/hello-1.0′
dh_auto_test
debian/rules binary
dh binary
dh_testroot
dh_prep
dh_auto_install
dh_installdocs
dh_installchangelogs
dh_perl
dh_link
dh_compress
dh_fixperms
dh_strip
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_gencontrol
dpkg-gencontrol: 警告: Depends field of package hello: 未知的替换变量 ${shlibs:Depends}
dpkg-gencontrol: 警告: File::FcntlLock not available; using flock which is not NFS-safe
dh_md5sums
dh_builddeb
dpkg-deb:正在新建软件包 hello,包文件为 ../hello_1.0-1_amd64.deb。
dpkg-genchanges >../hello_1.0-1_amd64.changes
dpkg-genchanges: 上传数据中包含完整的原始代码
dpkg-source –after-build hello-1.0
dpkg-buildpackage: 完整上载(包含原始的代码)
root@evan-pc:~/hello-1.0#

打包成功,看到上级目录有 deb包就成功了( 我这里为hello_1.0-1_amd64.deb)
root@evan-pc:~/hello-1.0# ls ../hello
hello-1.0/ hello_1.0-1.debian.tar.gz hello_1.0.tar.gz
hello_1.0-1_amd64.changes hello_1.0-1.dsc
hello_1.0-1_amd64.deb hello_1.0.orig.tar.gz

问题 解决
root@evan-pc:~/deb# make
Makefile:4: *** 遗漏分隔符 。 停止。
root@evan-pc:~/deb# vim Makefile
root@evan-pc:~/deb# make
Makefile:6: *** 遗漏分隔符 。 停止。
root@evan-pc:~/deb# vim Makefile

用tab就搞定了

http://hi.baidu.com/meme_orange/item/f740da8027b3b9dc5e0ec1a8

终端彩色
cp /etc/skel/.bashrc ~/ && . /root/.bashrc

制作Debian风格的Tengine deb包

首先,在/root 目录下建一个制作deb包的环境目录tengine,先不必建立其他目录,最后的总体结构如下图: (暂时没图)
安装一下要用的模块 这个是参考了原作者的
libgd2-xpm may be not
apt-get install -y libxml2 libxslt1.1 libxslt1-dev libgd2-xpm libgd2-xpm-dev libgeoip1 libgeoip-dev libssl-dev libpcre3 libpcre3-dev libssl0.9.8

下载tengine源码包:tengine-1.4.2.tar.gz,进行编译安装,编译参数如下 若是有报错,把相关的模块去掉算了
wget -c http://tengine.taobao.org/download/tengine-1.4.2.tar.gz
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin --error-log-path=/var/log/nginx/error.log --conf-path=/etc/nginx/conf/nginx.conf --pid-path=/var/run --with-http_addition_module=shared --with-http_xslt_module=shared --with-http_geoip_module=shared --with-http_image_filter_module=shared --with-http_sub_module=shared --with-http_flv_module=shared --with-http_slice_module=shared --with-http_mp4_module=shared --with-http_concat_module=shared --with-http_random_index_module=shared --with-http_map_module=shared --with-http_split_clients_module=shared --with-http_charset_filter_module=shared --with-http_access_module=shared --with-http_userid_filter_module=shared --with-http_footer_filter_module=shared --with-http_upstream_least_conn_module=shared --with-http_upstream_ip_hash_module=shared --with-http_user_agent_module=shared --with-http_memcached_module=shared --with-http_referer_module=shared --with-http_limit_conn_module=shared --with-http_limit_req_module=shared --with-http_scgi_module=shared --with-http_secure_link_module=shared --with-http_autoindex_module=shared --with-http_sysguard_module=shared --with-http_rewrite_module=shared --with-http_fastcgi_module=shared --with-http_empty_gif_module=shared --with-http_browser_module=shared --with-http_uwsgi_module=shared

–prefix=/etc/nginx 这个目录存放除nginx二进制文件外的其余文件
–sbin-path=/usr/sbin 这个目录有编译好的nginx二进制文件

这个在make 时会出错
http://tengine.taobao.org/document_cn/http_sysguard_cn.html
http://blog.linuxeye.com/357.html

–with-http_sysguard_module=shared
之前已经把所有依赖的包已经安装过了,所以不会出现问题,只要make -j3 &&make install 即可,安装完成后在/etc/nginx中的目录结构如下:

tree /etc/ngnix/

然后 move 文件 准备打包
mkdir -p /root/tengine/etc/nginx/ /root/tengine/var/www/ /root/tengine/etc/nginx/ /root/tengine/etc/nginx/ /root/tengine/usr/sbin/ /root/tengine/etc/logrotate.d
mv /etc/nginx/conf /root/tengine/etc/nginx/
mv /etc/nginx/html/* /root/tengine/var/www/
mv /etc/nginx/modules /root/tengine/etc/nginx/
mv /etc/nginx/sbin /root/tengine/etc/nginx/
mv /usr/sbin/nginx /root/tengine/usr/sbin/

开始补全在/root/tengine的其他目录。
logrotate.d/nginx内容如下,nginx日志轮训用
vi /root/tengine/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}

init.d/nginx内容如下,init启动nginx用
mkdir -p /root/tengine/etc/init.d/
vi /root/tengine/etc/init.d/nginx

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
. /lib/lsb/init-functions
test_nginx_config() {
if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
then
return 0
else
$DAEMON -t $DAEMON_OPTS
return $?
fi
}
case "$1" in
start)
echo -n "Starting $DESC: "
test_nginx_config
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON || true
sleep 1
test_nginx_config
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
test_nginx_config
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
configtest)
echo -n "Testing $DESC configuration: "
if test_nginx_config
then
echo "$NAME."
else
exit $?
fi
;;
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
exit 1
;;
esac
exit 0

chmod +x /root/tengine/etc/init.d/nginx
cp /dev/null /root/tengine/etc/nginx/conf/nginx.conf
vi /root/tengine/etc/nginx/conf/nginx.conf

worker_processes 1;
error_log /var/logs/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/logs/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /var/www;
index index.html index.htm;
}
error_page 500 502 503 504 /var/www/50x.html;
location = /50x.html {
root /var/www;
}
}
}

DEBIAN目录有配置

control:提供软件包的关联信息, 用于软件包管理器显示软件包的信息,用于安装前校验的依赖关系.是必需提供的文件
postrm:在软件包从系统中卸载以后执行。dpkg告知这个脚本软件包是否已被卸载或清除。当因为冲突或升级,软件包被其它软件包卸载时也会执行这个脚本。
preinst:在安装或升级软件包之前执行。
prerm:脚本在软件包卸载之前执行。
postinst:脚本在解包之后作为配置过程的一部分运行。例如:监听本机ip地址,更换端口之类的修改。在本文中我不需要做调整,所以没有设置该文件。

DEBIAN/control内容如下,因为之前把依赖包都安装了,所以在控制文件中去掉了依赖关系设置,觉得这样做不好
mkdir -p /root/tengine/DEBIAN

vi /root/tengine/DEBIAN/control
Package: nginx
Version: 1.2.5
Architecture: amd64
Maintainer: Jose Parrella
Provides: httpd
Section: httpd
Priority: optional
Homepage: http://nginx.net
Description: xxxxxxxx

vi /root/tengine/DEBIAN/postinst

vi /root/tengine/DEBIAN/postrm
#!/bin/sh
set -e
case "$1" in

purge)
rm -rf /var/lib/nginx /var/log/nginx /etc/nginx
;;
remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
;;
*)
echo "postrm called with unknown argument \`$1'" >&2
exit 1
esac
# Automatically added by dh_installinit
if [ "$1" = "purge" ] ; then
update-rc.d nginx remove >/dev/null
fi
# End automatically added section
exit 0

vi /root/tengine/DEBIAN/preinst
vi /root/tengine/DEBIAN/prerm
#!/bin/sh
set -e
case "$1" in
remove|remove-in-favour|deconfigure|deconfigure-in-favour)
if [ -x /etc/init.d/nginx ]; then
if [ -x /usr/sbin/invoke-rc.d ] ; then
invoke-rc.d nginx stop
else
/etc/init.d/nginx stop
fi
fi
;;
upgrade|failed-upgrade)
;;
*)
echo "prerm called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0

#要看清楚,不是说644是ok的
root@deepin-pc:~# dpkg -b tengine/ tengine_1.4.2-1+deep_amd64.deb
dpkg-deb: error: 维护者的脚本 preinst 的权限位是 644 (必须 >=0555 且 <=0775) chmod 0755 tengine/DEBIAN/preinst ;chmod 0755 tengine/DEBIAN/prerm
chmod 0755 tengine/DEBIAN/postrm

打包
dpkg -b tengine/ tengine_1.4.2-1+deep_amd64.deb

卸载tengine软件包
apt-get --purge remove nginx

参考
http://my.oschina.net/guol/blog/95708

ps 其它好功能
加载ngx_http_autoindex_module.so模块,在配置文件中加入如下配置
dso{
load ngx_http_autoindex_module.so;
}

我在deepin 2014 打包的 好像云了debian 哈哈 当然是不能用了 可能ubuntu的话可以

calibre

近来又迷上折腾kpw了 , 本人不喜欢带usb线,其实是老是忘记带 哈哈哈
外加平时pdf的书有很多 ,但是放在kpw上看总是不太好看,虽然kpw安装了 Koreader,于是,又想起了 calibre,对了 好像最先是刘导介绍的,THX

calibre 但是这个转换格式后有太多空格,虽然可以看,但是影响美观 ,好处是可以打开然后发送就行了,不用usb 哈哈
http://calibre-ebook.com/download_linux

安装如下
install calibre

转换如下c

发送如下
send