maven assembly插件把所有的class和依赖打到一个jar包中

有时候为了方便换个环境运行。需要一个简单的方式打包。 而java又不是很方便像C那样直接编译生成一个可执行文件。
可以使用assembly插件,在pom.xml的plugins下配置:

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>net.thinkingquest.Test</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

运行 mvn assembly:assembly 就在target/ 生成了一个 xxx-jar-with-dependencies.jar。
直接运行 jar -jar 就可以运行了。

ssh SOCKS代理访问google失败的问题

linode的vps,ssh SOCKSv5代理,访问google经常被提示:

We’re sorry…

… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now.

See Google Help for more information.

起初以为是google认为这个ip发送了太多请求,有机器人嫌疑。 但是这个ip是自己的并未有大范围传播。经过一番搜索,了解到原来是ipv6的缘故。有人说是google屏蔽了linode的ipv6。 只需要在linode的vps上禁用ipv6就可以了。
继续阅读“ssh SOCKS代理访问google失败的问题”

selinux引起CentOS无法使用public key登陆的问题

在新安装的centos上建立 /root/.ssh目录,chmod为700, 这个目录中建立 authorized_keys文件,复制公钥进去,设置权限为600,从其他机器使用public key进行ssh登陆,这件事已经做过无数次了。

这次就总是无法登陆成功,退化为使用password,可以登陆成功。
对比了 /etc/ssh/sshd_config文件,和其他服务器没有任何区别。

原来是selinux引起的。 在其他可以正常登陆的服务器上, /etc/selinux/config中, selinux=disabled。而在这次出问题的centos上,则是selinux=enforcing。关于这一点可以使用getenforce命令查看。

继续阅读“selinux引起CentOS无法使用public key登陆的问题”

如何透明的穿过跳板机

出于安全和管理方面的需要,许多公司的服务器必须通过跳板机才能登陆。也就是说像这样子:
假设我们定义3个名字:
localhost 代表工程师工作使用的一个ubuntu系统的pc机。
hopper 代表跳板机。
server 代表工程师想要登陆的服务器。

那么工程师需要在localhost上执行 ssh hoper,这样就进入了hoper服务器。然后再执行 ssh server,这样就登陆了server。
也可以这样: 再localhost上直接执行 : ssh -t hopper ssh -t server。直接一条命令就登陆到server。

当需要scp一些文件的时候则显得更加麻烦,要再hopper上建立一个临时目录,scp到hopper,然后再从hopper上scp到server。这简直是无法忍受的。

不过这样的方式都还是显得太过于麻烦。 还有更好的办法:

继续阅读“如何透明的穿过跳板机”

git命令笔记

撤销修改,回退到上一个版本(上一次commit):

git reset --hard HEAD

如果要退回到过往的版本,可以写做 git reset –hard {commit id}, commit id是一个字符串,大约7位。 可以通过 git reflog命令查看过往的commit记录获得。 HEAD代表上一次commit。 再之前一次可以写做 HEAD^。同理HEAD^^,HEAD^^^, HEAD^100。

分支操作:
列出所有分支:

git branch

列出所有的分支。 当前的工作分支前会以星号*标记。

创建名为dev的分支:

git branch dev

切换到dev分支:

git checkout dev

在dev分支上开发一个feature,经过测试之后,需要合并回master上去。 那么需要先 git checkout master切换回master分支。然后:

将dev分支上的修改merge到当前分支:

git merge dev

删除dev分支:

git branch -d dev

创建工程:
如果是在服务器上创建工程,只需要git clone下来就可以继续使用了。
如果是在本地创建工程,要提交到服务器上,需要对本地工程的remote进行操作。
首先仍然需要在服务器上创建工程,例如创建之后的地址为:git@gitserver:prefix/project.git
那么在本地进入目录下:

git remote add origin git@code.wilddog.cn:wdserver/cloud-core-new.git

接下来就可以正常的commit,push了。

继续阅读“git命令笔记”

iptables笔记

平时我们在概念中称呼iptables为防火墙的近义词,何况又有/etc/init.d/iptables (start|stop)这样的启动和停止的命令,那么就感觉上似乎iptables一直在工作,它仿佛应该是一个daemon进程。但其实iptables是一个工具,用户通过iptables配置内核中的netfilter模块的规则。配置完之后iptables进程就退出了,内核中的netfilter模块持续使用它的规则表继续工作。所以平时在ps -ef命令中是不会看到iptables的进程的。

iptables中有链(chain)和规则的概念。
iptables中默认有5个chain,分别是PREROUTING,INPUT, FORWARD, OUTPUT, POSTROUTING。这5个chain的场景就如字面意思,比如input就是数据包流入。
继续阅读“iptables笔记”

路由器刷openwrt系统,打造翻墙路由器

我们都需要使用google提供的搜索,gmail等优质服务。但是由于方墙的存在,使得大家各自搞各自的翻墙办法。 其实还有一个不错的办法,那就是在路由器这一层翻墙,对路由器用户透明。

我们使用的方案是openwrt系统, shadowsocks,chinadns。 shadowsocks是一个sock代理软件,而chinadns则好像为了解决天朝的dns污染。

这次没有边做边记录,现在是2,3天之后了,凭借一些记忆写下此篇文章,以供参考。

继续阅读“路由器刷openwrt系统,打造翻墙路由器”

修改atlassian系列scm系统的域名

使用了atlassian系列的scm系统,包括crowd, confluence, jira。 形式如
http://olddomain/crowd
http://olddomain/jira
http://olddomain/wiki

现要把olddomain修改为newdomain。 官方文档中并没有confluence系统中user directory修改的文档,管理后太中也未看到此项功能。 经过一番琢磨和google,最终解决。记录一下过程。

crowd:
修改 crowd.properties文件中的crowd.server.url和application.login.url中的host为新的hostname。
在applications中修改各个application的url。

confluence:
登录管理后台(此时crowd不能认证,但是内置的confluence管理员账户还可以登录,如果不能了,可能需要手动修改配置),修改Server Base URL。
数据库表, update cwd_directory_attribute 表。 修改 attribute_name的值为“crowd.server.url”的记录的attribute_value字段。
检查classes目录下的crowd.properties配置文件中的crowd server url。如果需要修改,就修改为新的crowd域名。

jira:
同confluence,update数据库字段。

(全文完)

rsync使用笔记

rsync是一个同步文件的工具,提供了增量复制的功能。

服务端配置:

建立配置文件,在/etc/rsyncd.conf。内容如下:

uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid

[backup]
    path = /data/backup
    hosts allow = 10.10.11.123
    read only = no

启动rsync daemon进程。 /usr/bin/rsync –daemon

在客户端:
rsync -va dirtobackup serverip::backup/
(全文完)

subversion服务器搭建并集成atlassian crowd做账户管理

首先是一堆依赖的安装。

yum install make
yum install libtool
yum install zlib zlib-devel

yum install libserf

yum install openssl openssl-devel

yum install apr apr-devel apr-util apr-util-devel
yum install perl-devel perl-ExtUtils-Embed

sqlite yum源里的版本太低。 需要到 sqlite.org下载最新的源代码, configure; make; make install; 安装

subversion.apache.org下载最新的源代码。
./configure –prefix=/data/software/subversion
make
make install

继续阅读“subversion服务器搭建并集成atlassian crowd做账户管理”