服务器系统: centOS5.8 64bit
jdk: jdk-7u10-linux-x64.tar.gz
将jdk和tomcat上传到服务器:
解压:[root@localhost zip]# tar -zxvf jdk-7u10-linux-x64.tar.gz
检查系统自带jdk
[root@localhost zip]# java -version java version "1.4.2" gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-52) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
卸载步骤:
确定jdk版本
[root@localhost zip]# rpm -qa | grep jdk ldapjdk-4.18-2jpp.3.el5 [root@localhost zip]# rpm -qa | grep gcj libgcj-devel-4.1.2-52.el5 java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp.115 libgcj-devel-4.1.2-52.el5 libgcj-src-4.1.2-52.el5 java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 libgcj-4.1.2-52.el5 java-1.4.2-gcj-compat-src-1.4.2.0-40jpp.115 libgcj-4.1.2-52.el5 java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp.115 java-1.4.2-gcj-compat-javadoc-1.4.2.0-40jpp.115 [root@localhost zip]# rpm -qa | grep java java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp.115 bsh-javadoc-1.3.0-9jpp.1 java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 java-1.4.2-gcj-compat-src-1.4.2.0-40jpp.115 gcc-java-4.1.2-52.el5 xmlrpc-javadoc-2.0.1-3jpp.1 java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp.115 java-1.4.2-gcj-compat-javadoc-1.4.2.0-40jpp.115
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 卸载完成后效果:
[root@localhost zip]# rpm -qa | grep java bsh-javadoc-1.3.0-9jpp.1 gcc-java-4.1.2-52.el5 xmlrpc-javadoc-2.0.1-3jpp.1 [root@localhost zip]# rpm -qa | grep jdk [root@localhost zip]# rpm -qa | grep gcj libgcj-devel-4.1.2-52.el5 libgcj-devel-4.1.2-52.el5 libgcj-src-4.1.2-52.el5 libgcj-4.1.2-52.el5 libgcj-4.1.2-52.el5
[root@localhost /]# mkdir java
编辑环境变量在文件末尾添加如下内容:
[root@localhost /]# vi /etc/profile
保存并测试jdk
[root@localhost /]# java -version java version "1.7.0_10" Java(TM) SE Runtime Environment (build 1.7.0_10-b18) Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
编写脚本测试
public class Test{ public static void main(String[] args){ System.out.print("Hello world!!"); } }
测试通过 安装成功!
[root@localhost ~]# javac Test.java
安装tomcat:
要检查一下你的服务器是否安装了REDHAT自带的APACHE,如果有,需要卸载掉,不然80端口会被占用,TOMCAT只能用8080,这不是很方便。
卸载APACHE的方法很简单先 rpm -qa|grep httpd,查找到相应的rpm,然后卸载即可。
需要注意的事,卸载有个先后顺序,一般先卸载 devel,然后再卸载httpd.rpm,两者有依赖关系,如果不考虑顺序,可以用 rpm -e –nodeps卸载。
将解压后的目录移动到 /usr/local下
[root@localhost conf]# tar -zxvf apache-tomcat-7.0.34.tar.gz
70 <Connector port="80" protocol="HTTP/1.1" 默认为8080 修改为80端口
启动tomcat
再次编辑环境变量文件在其末尾添加
69 export JAVA_HOME=/java/jdk1.7.0_10
在浏览器中键入服务器ip 就可以访问tomccat首页了
至此 配置完成
继续在原来的项目的基础上继续推进,我们在原来合并了master和featurex1的基础上,继续推进两步master分支。
然后我们推进featurex1分支两步。
这个时候featurex1分支的分支图如图所示:
然后,我们想把featurex1的内容合并到master分支中,假设已经测试通过了所有的featurex1分支中的内容。
watkins@watkins:~/watkins/finance$ git merge featurex1 Merge made by the 'recursive' strategy. funciton3 | 2 ++ 1 file changed, 2 insertions(+) watkins@watkins:~/watkins/finance$
这次没有出现fast-forward,因为两个分支的快照不存在谁是谁的父节点的情况了,而是分析两个分支的共同的父节点,创建新的快照。
这个时候我们的分支图如图所示:
的开发历史是从更早的地方开始分叉的。由于当前 master 分支所指向的 commit (C4)并非想要并入分支(iss53)的直接祖先,Git 不得不进行一些处理。就此例而言,Git 会用两个分支的末端(C4 和 C5)和它们的共同祖先(C2)进行一次简单的三方合并计算
两个分支的开发过程中,可能同时修改了同一个文件,所以有的时候这种情况合并分支会存在冲突,需要手动的解决这些冲突以后才能进行合并。
冲突的合并有时候合并操作并不会如此顺利。如果你修改了两个待合并分支里同一个文件的同一部分,Git 就无法干净地把两者合到一起(译注:逻辑上说,这种问题只能由人来解决)。如果你在解决问题 #53 的过程中修改了hotfix 中修改的部分,将得到类似下面的结果:
$ git merge iss53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
Git 作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以用 git status 查阅:
[master*]$ git status index.html: needs merge # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # unmerged: index.html #
任何包含未解决冲突的文件都会以未合并(unmerged)状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。可以看到此文件包含类似下面这样的部分:
<<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer"> please contact us at support@github.com </div> >>>>>>> iss53:index.html
可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时检出的分支)中的内容,下半部分是在 iss53 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:
<div id="footer"> please contact us at email.support@github.com </div>
这个解决方案各采纳了两个分支中的一部分内容,而且我还删除了 <<<<<<<,=======,和>>>>>>> 这些行。在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决(resolved)。因为一旦暂存,就表示冲突已经解决。如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突:
$ git mergetool merge tool candidates: kdiff3 tkdiff xxdiff meld gvimdiff opendiff emerge vimdiff Merging the files: index.html Normal merge conflict for 'index.html': {local}: modified {remote}: modified Hit return to start merge resolution tool (opendiff):
如果不想用默认的合并工具(Git 为我默认选择了 opendiff,因为我在 Mac 上运行了该命令),你可以在上方”merge tool candidates(候选合并工具)”里找到可用的合并工具列表,输入你想用的工具名。我们将在第七章讨论怎样改变环境中的默认值。
退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。
再运行一次 git status 来确认所有冲突都已解决:
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.html #
如果觉得满意了,并且确认所有冲突都已解决,也就是进入了缓存区,就可以用 git commit 来完成这次合并提交。提交的记录差不多是这样:
Merge branch 'iss53' Conflicts: index.html # # It looks like you may be committing a MERGE. # If this is not correct, please remove the file # .git/MERGE_HEAD # and try again. #
如果想给将来看这次合并的人一些方便,可以修改该信息,提供更多合并细节。比如你都作了哪些改动,以及这么做的原因。有时候裁决冲突的理由并不直接或明显,有必要略加注解。
-、通过hostapd、dhcp和iptables创建wifi热点
我早在三年前,就注意android了。不过最近才买了台天宇w719,而之前我一直在用MTK平台手机。
买手机之前一个星期内,我通过互联网,非常详细的有了解了一遍android。我打算将它打造成一种超级装备:因为我用的系统是fedora17系统,笔记本自带的网卡支持AP,所以我打算通过ssh达成手机与笔记本的互访。在linux系统上安装ssh是非常方便的。比如,我用的rpm系的,那么:
//前者是ssh客户端,用于连接手机;后者是ssh服务端,用于手机连接笔记本
yum install openssh-clients;yum install openssh-server
至于手机,可以用quickssh建立ssh服务端。
当手机到手后,扯淡的事来了!系统是android-4.0.4,在互联网上找不到可用的wpa_supplicant文件(ad-hoc补丁,原生android系统不支持ad-hoc热点)。仅仅这个阻碍,一下子就把我的设想完全推翻了!
不过,我不气馁。
通过搜索,了解到通过hostapd可以模拟AP((无线)访问接入点)。互联网上介绍这方面的文章比较多,针对ubuntu系统的为多。而且,内容大多各不相同;内容相同的地方,多在于hostapd.conf的配置。重点难点、易糊涂的地方在dhcpd.conf的配置和iptables的配置。下文中,我会对这两方面作比较详细的说明。文章末尾也会留下几个我所参考到的几篇文章的地址。
1,先说hostapd.conf的配置。
安装:
yum install hostapd
配置:
fedora17中,该文件位置在/etc/hostapd/hostapd.conf
用vim编辑,文件的内容如下:
# This will give you a minimal, insecure wireless network. # # DO NOT BE SATISFIED WITH THAT!!! # # A complete, well commented example configuration file is # available here: # # /usr/share/doc/hostapd-0.7.3/hostapd.conf # # For more information, look here: # # http://wireless.kernel.org/en/users/Documentation/hostapd # ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel # Some usable default settings... # 指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止 accept_mac_file = 指定允许MAC列表文件位置,且一行一个 deny_mac_file = 指定禁止MAC列表文件位置,且一行一个 auth_algs=1 ignore_broadcast_ssid=0 # Uncomment these for base WPA & WPA2 support with a pre-shared key # 密码的安全类型 wpa=3 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP # DO NOT FORGET TO SET A WPA PASSPHRASE!! # 写自己的wifi密码 wpa_passphrase=**** # Most modern wireless drivers in the kernel need driver=nl80211 driver=nl80211 # Customize these for your local configuration... #ssid处写热点的名称 interface=wlan0 hw_mode=g channel=6 ssid=xxx country_code=US
配置好后,执行:
sudo hostapd -B /etc/hostapd/hostapd.conf
以刚才编辑的指定配置文件启动hostapd服务,启动无线热点。到这里,手机wifi应该能搜得到笔记本发射出的无线信号了。而且执行ifconfig,显示会有mon.wlan0虚拟网卡。但此时,可能手机一直显示正在获取ip地址。原因是,笔记本端没有给手机端分配ip地址。以下方法,可以解决这个问题。
2,dhcpd.conf的配置。
安装:
yum install dhcp
配置:
fedora17中,该文件位置在 /etc/dhcp/dhcpd.conf
用vim编辑,文件的内容如下:
#ddns-update-style interim; #ignore client-updates; # sunnet后面的地址可以根据自己的情况写成 192.168.0.0之类的 subnet 10.10.0.0 netmask 255.255.255.0 { # --- default gateway设置客户端的相关选项 #允许dhcpd服务分配的ip区间,也就说,比如我设置的可以连接15台设备。这是hostapd模拟AP的优势所在 range 10.10.0.2 10.10.0.16; option routers 10.10.0.1;#路由 #option subnet-mask 255.255.255.0; # option nis-domain "domain.org"; # option domain-name "domain.org"; option domain-name-servers 8.8.8.8,208.67.222.222;#域名服务器 option broadcast-address 10.10.0.255;#广播地址 #option time-offset -18000; # Eastern Standard Time # option ntp-servers 10.10.0.0; # option netbios-name-servers 10.10.0.0; # --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2; default-lease-time 600; max-lease-time 7200; # we want the nameserver to appear at a fixed address # host ns { # next-server marvin.redhat.com; # hardware ethernet 94:39:e5:34:b2:95; # fixed-address 207.175.42.254; # } }
配置好后,执行:
sudo ifconfig wlan0 10.10.0.1/16 netmask 255.255.255.0
以设置虚拟网卡的子网区间和子网掩码。
之后执行:
sudo service dhcpd start
以启动dhcpd服务,用于动态给各接入设备分配ip地址。
至此,便解决了 手机一直显示正在获取ip地址 的问题。但新的问题来的,设配虽然能接入虚拟网卡,却上不了网。其原因在于,从设备来的数据没有通过真实网卡传递到互联网中。自然,互联网中的数据也无法送入设配。以下方法可以解决这个问题:nat和端口转发。
3, iptables的配置。
fedora17自带了,iptables(防火墙软件)。它可以实现nat和端口转发。
配置:
fedora17中,该文件位置在 /etc/sysconfig/iptables
在这里要先弄清楚,哪个网卡是虚拟网卡的适配器。
执行ifconfig:
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 726 bytes 58044 (56.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 726 bytes 58044 (56.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 mon.wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 unspec 94-39-E5-34-B2-95-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 115719 bytes 29273395 (27.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 p7p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::226a:8aff:fe60:78af prefixlen 64 scopeid 0x20<link> ether 20:6a:8a:60:78:af txqueuelen 1000 (Ethernet) RX packets 585598 bytes 464520457 (443.0 MiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 176682 bytes 16436547 (15.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 1 collisions 0 ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1492 inet 117.9.210.54 netmask 255.255.255.255 destination 117.9.208.1 ppp txqueuelen 3 (Point-to-Point Protocol) RX packets 584705 bytes 449004909 (428.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 175927 bytes 12520569 (11.9 MiB) TX errors 0 dropped 5 overruns 0 carrier 0 collisions 0 wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 10.10.0.1 netmask 255.255.0.0 broadcast 10.10.255.255 inet6 fe80::9639:e5ff:fe34:b295 prefixlen 64 scopeid 0x20<link> ether 94:39:e5:34:b2:95 txqueuelen 1000 (Ethernet) RX packets 129595 bytes 8819481 (8.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 278844 bytes 410783345 (391.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
但我没弄懂。感觉不是wlan0。。。有空用排除法试试。目前,笔记本的wifi功能可正常使用。。。
执行:
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o wlan0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o p7