Fedora 15 无法引导的问题

March 7th, 2012

不知自己做了什么改动,Fedora 突然无法引导,boot 过程中提示

systemd-fsck[605]: /dev/sda5: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
systemd-fsck[605]: (i.e., without -a or -p options)
[   13.652068] systemd-fsck[605]: fsck failed with error code 4.
Welcome to emergency mode. Use "systemctl default" or ^D to activate default
mode.
Give root password for maintenance
(or type Control-D to continue):

输入 root 密码

# fsck /dev/sda5

或者重启动以后,进入 grub 编辑模式,找一个启动内核,按 e 修改启动参数,在 ro 后面加上 emergency ,回车后,按 b 进行 emergency 模式的引导。
引导过程中又提示另一个 /dev/mapper/… 分区需要 fsck,按照上面的方法继续 fsck,之后 exit 退出,系统会继续引导,直到成功进入系统。

Tags: ,
Posted in Technology | No Comments »

Fedora 下配置基于 http 协议的 git 公共库

March 5th, 2012

如果你想把你在 git 下开发的项目以 http 协议发布出去,可以按照下面来进行配置。

安装配置 gitweb
~~~~~~~
fedora 可以直接通过 yum 来安装 gitweb,安装好以后,修改 gitweb.conf,在文件最后加上下面两句。

[tommy@tmypc ~]$ sudo yum install gitweb
[tommy@tmypc repositories]$ sudo vi /etc/gitweb.conf
...
our $projectroot = "/var/www/git/repositories";
our $default_text_plain_charset  = "utf-8";

安装 apache
~~~~~~~
这里不用配置 apache,gitweb 装好以后会自动在 /etc/httpd/conf.d/ 目录下创建一个 git.conf 的配置文件

[tommy@tmypc ~]$ sudo yum install httpd
[tommy@tmypc ~]$ sudo chkconfig httpd on 2345

配置公共库
~~~~~~~
在 /var/www/git 目录下建立一个公开的仓库 repositories

[tommy@tmypc ~]$ cd /var/www/git/
[tommy@tmypc git]$ mkdir repositories

设置权限,让 tommy 用户可以写这个目录,然后 clone 一个 bare 类型的项目 sandbox.git

[tommy@tmypc git]$ sudo chown -R tommy:root repositories/
[tommy@tmypc repositories]$ git clone --bare /home/tommy/sandbox/ sandbox.git

下面让 git 接受 http 协议的 clone

[tommy@tmypc repositories]$ cd sandbox.git/
[tommy@tmypc sandbox.git]$ cp hooks/post-update.sample hooks/post-update
[tommy@tmypc sandbox.git]$ chmod a+x hooks/post-update

重启 apache

[tommy@tmypc sandbox.git]$ sudo service httpd restart

回到你正在开发的项目,为它上加一个 remote,名称为 ty,指向的是你的公共库

[tommy@tmypc sandbox]$ git remote add ty /var/www/git/repositories/sandbox.git

如果有要公开的修改,直接 pushty

[tommy@tmypc sandbox]$ git push ty

其它人可以通过你机器的 ip,以 http 协议 clone,但不能 push

[tommy@tmypc Temp]$ git clone http://x.x.x.x/git/repositories/sandbox.git

参考文档
~~~~~~~
[1] http://progit.org/book/ch4-1.html
[2] http://stackoverflow.com/questions/3722299/manage-http-access-to-git-repositories-using-gitosis

Tags: , ,
Posted in Technology | No Comments »

在 windows 下配置 git 公共库

March 4th, 2012

如果你的开发团队采用的是 集成管理员工作流,则需要每一个开发人员都有一个公共的代码库供其他人访问。在 linux 上设置很简单,但是如果部分开发人员必须使用 windows 环境, 可以按照下面的方式来配置。

安装 Git
~~~~~~~
从 googlecode 下载 msysgit 1.7.9,一路默认安装。如果你使用的是 eclipse 的 git 插件(如 egit),也需要安装 msysgit。安装完成后, 最好立刻配置 .gitconfig.ssh,方法网上介绍很多,这里不啰嗦了。
装好 msysgit以后,进入你的 git 安装目录 C:\Program Files\Git\libexec\git-core 下找到一个 git-http-backend.exe 文件,双击运行一下,如果提示缺少一个 libiconv-2.dll 文件,需要你手工将这个文件从 C:\Program Files\Git\bin 目录复制到 C:\Program Files\Git\libexec\git-core 目录中。

安装 Apache
~~~~~~~
从 apache 的官方网站下载最新的 msi 安装包 httpd 2.2.22 no_ssl msi,然后一路默认安装。在配置服务器域属性的时候使用 localhost ,如下

Network Domain: localhost
Server Name: localhost
Admin Email: 你的邮件地址

访问 http://localhost, 成功的话会显示 It works!

创建一个 git 仓库目录
~~~~~~~
如果你已经通过 eclipse 的 egit 插件 clone 好了项目,那么默认会有一个 $HOME/git 目录被创建,下面的内容可以跳过。
否则你需要从装好的 git 菜单运行 Git Bash

$ mkdir git
$ cd git
$ git init --bare sandbox.git

也会在 $HOME 下创建一个 git 目录,并初始化了一个空的 git 项目 sandbox.git

修改 Apache 配置
~~~~~~~
这步稍微复杂一点, 从你的 apache 安装目录找到 httpd.conf 文件,默认是安装在 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目录下,编辑这个文件,在文件的末尾加上下面的内容:

SetEnv GIT_PROJECT_ROOT C:/Users/Tommy/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \
                        "C:/Program Files/Git/libexec/git-core/git-http-backend.exe/$1"
 
<Directory "C:/Program Files/Git/libexec/git-core/">
  Allow From All
</Directory>

第一行的 GIT_PROJECT_ROOT 告诉 git 你的仓库位置, 第二行告诉 git 在这个目录下的所有项目应该通过 http 发布 (默认情况下, git 只发布那些含有 git-daemon-export-ok 文件的仓库),剩下的 ScriptAliasMatch 配置告诉 apache , 如果开头是 git 的 url 请求交给 git-http-backend.exe 来处理。最后是设置目录的访问权限。别忘了把路径改为你自己的路径。
httpd.conf 文件默认只有管理员可以修改, 如果当前用户不是管理员, 需要修改这个文件的权限。

改好后,重起 apache,进入 Git Bash, 随便进入一个目录(但不要是 C:/Users/Tommy/git),测试一下通过 http 进行 clone

$ cd
$ git clone http://localhost/git/sandbox.git

到这里为止,git 的公共仓库算是配置完成了,下面简单说一下 gitweb 的配置,可配可不配,个人觉得用处不大。

gitweb 配置
~~~~~~~
msysgit 安装包里自带 perl ,但是缺少 cgi.pm 模块, 需要从 CPAN 下载
解压缩后, 将 lib 下的文件复制到 C:\Program Files\Git\lib\perl5\5.8.8 目录下。

继续修改 apache 的 httpd.conf 文件,在文件最后再增加下面的内容:

Alias /gitweb "C:/Program Files/Git/share/gitweb"
 
<Directory "C:/Program Files/Git/share/gitweb/">
  AddHandler cgi-script .cgi
  <Files ~ "\.cgi$">
    Options +ExecCGI
  </Files>
  AllowOverride None
  Order allow,deny
  Allow from all
  DirectoryIndex gitweb.cgi
</Directory>

修改 gitweb.cgi 第一行, 使用 msysgit 中自带的 perl

#!C:/Program Files/Git/bin/perl

修改 git 命令的位置

our $GIT = "C:/Program Files/Git/bin/git";

修改我们 git 仓库的位置, 注意, 如果你的仓库在 c:\Users\Tommy\git 目录, 应该按照下面的写法

our $projectroot = "/c/Users/Tommy/git";

还需要在 C:/Program Files/Git/ 目录下创建一个 tmp 目录。
重起 apache ,开浏览器,访问 http://localhost/gitweb

不知为什么,通过 msysgit 里自带的 perl 在 apache 中运行 gitweb 速度很慢,但我直接通过下面的命令执行 gitweb.cgi 却很快

c:\Program Files\Git\bin>perl.exe "c:\Program Files\Git\share\gitweb\gitweb.cgi"

所以这里不建议配置 gitweb,只供参考。

参考文档
~~~~~~~
[1] http://www.jeremyskinner.co.uk/2010/07/31/hosting-a-git-server-under-apache-on-windows/
[2] http://blog.csdn.net/dbzhang800/article/details/6901460
[3] https://git.wiki.kernel.org/articles/g/i/t/MSysGit~GitWeb_6d0c.html#Install_GitWeb_CGI_on_Windows
[4] http://jmodalwindow.java.net/manual/dpl/html/version.control.system.html

Tags: , ,
Posted in Technology | No Comments »

CentOS 6 下的 vsftpd 配置

January 30th, 2012

安装 vsftpd, 并让它开机启动

[tommy@ds1 ~]$ sudo yum install vsftpd
[tommy@ds1 ~]$ sudo chkconfig vsftpd on
[tommy@ds1 ~]$ sudo service vsftpd start

修改防火墙,放行 21 端口, 同时修改 iptable 的配置

[tommy@ds1 ~]$ sudo vi /etc/sysconfig/iptables
# 增加下面一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
 
[tommy@ds1 ~]$ sudo vi /etc/sysconfig/iptables-config
# 修改下面一行
IPTABLES_MODULES="ip_conntrack_ftp"
#打开下面两行的注释
anon_upload_enable=YES
anon_mkdir_write_enable=YES
 
#在文件最后增加下面两行
anon_other_write_enable=YES
anon_root=/var/www/html

创建一个 ftp 用户可以访问的 download 目录

[tommy@ds1 ~]$ sudo mkdir /var/www/html/download
[tommy@ds1 ~]$ sudo chmod 777 /var/www/html/download

重启相关服务

[tommy@ds1 ~]$ sudo service vsftpd restart
[tommy@ds1 ~]$ sudo service iptables restart

Tags: ,
Posted in Technology | No Comments »

Fedora 15 的 hostname 问题

December 29th, 2011

今天在 Fedora 15 上编译 java 应用,报下面的错误:

Failed to get local hostname java.net.UnknownHostException: tmypc: tmypc: Name or service not known
......

我的 /etc/sysconfit/network 文件中的 HOSTNAME=tmypc,但是 /etc/hosts 文件里没有 tmypc 的配置,加上就一切正常了,如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 tmypc
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 tmypc

在 Fedora 12 下没有这个问题,默认会吧 tmypc 加到 /etc/hosts 下,Fedora 15没有加,不知是 Bug 还是我的安装配置有问题。

Tags:
Posted in Technology | No Comments »

ssh 服务连接慢的问题

December 27th, 2011

新配的一台 Centos 6.2 服务器,通过 ssh 对其进行连接时很慢,如果成功登录,后面的操作就一切正常了。
先打开 Verbose 看下在慢在那一步:

[tommy@tmypc ~]$ ssh -v -l tommy 192.168.0.1
.....
debug1: SSH2_MSG_SERVICE_ACCEPT received

上面这句等待的时间最长,google 了一下,在服务器上做如下修改:

[tommy@t ~]# sudo vi /etc/ssh/sshd_config 
#查找 UseDNS,改为
UseDNS no
 
#此外如果你有下面的提示
Address 192.168.0.1 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
可以把 sshd_config 中的 GSSAPIAuthentication 改为
GSSAPIAuthentication no

重启 ssd 服务

[tommy@t ~]# sudo service sshd restart

Tags:
Posted in Technology | No Comments »

在 RHEL 6 上为 Cisco ASA 配置日志服务器

December 27th, 2011

最近 CISCO ASA 偶尔出现 inside , outside 同时阻塞的情况,需要配一个日志服务器来记录 ASA的日志,以便我分析问题的原因。配置服务器端,操作系统为 rhel 6.0。
在 /var/log 目录创建一个 ASA 使用的日志文件。

[tommy@t ~]$ sudo touch /var/log/cisco-asa.log

修改 rsyslog.conf

[tommy@t ~]$ sudo vi /etc/rsyslog.conf
 
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
 
# Cisco ASA Logging
:fromhost-ip, isequal, "x.x.x.x" /var/log/cisco-asa.log
& ~

上边语句第一部分,只需要打开两行注释,让其监听 UDP 的 514 端口,第二部分要增加到文件中,x.x.x.x 是防火墙的 IP,别漏了 & ~,很关键。

修改防火墙配置,放行 UDP 514

[tommy@t ~]$ sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT

重启服务

[tommy@t ~]$ sudo service iptables restart
[tommy@t ~]$ sudo service iptables rsyslog

看看是否开始正常监听端口

[tommy@t ~]$ sudo lsof -i:514

配置 CISCO ASA

ASA-IDC# conf t
ASA-IDC(config)# logging enable
ASA-IDC(config)# logging host inside x.x.x.x
ASA-IDC(config)# logging trap 3
ASA-IDC(config)# exit
ASA-IDC# wr m

上面的 inside 日志发出的接口名称, x.x.x.x 是日志服务器的 IP,如果不嫌日志量大,可以改为 trap 4级别。

最后登录到日志服务器,看看日志是否已经过来了。

[tommy@t ~]$ tail -f /var/log/cisco-asa.log

参考文档
~~~~~~~
[1] http://blog.migrationking.com/2011/02/configure-red-hat-enterprise-linux-6.html
[2] http://www.ehow.com/how_6628293_configure-5505-use-syslog-server.html

Tags: ,
Posted in Technology | No Comments »

Android 手机

October 25th, 2011

前几天关注了一下 android 4 发布, 勾起了我对这个系统的兴趣, 周末一冲动去中关村淘了一个 naxus s 回来, 全部2400, 兄弟们都说划算。手机默认装的是 android 2.3.3,配好 wifi,自动升级到 2.3.6,之后就一直在网上商店逛,下载了不少有趣的应用。昨天更是买了一个联通的 3g 号,打算彻底加入 3g行列。

由于之前用的手机一直是几百块钱的飞利浦待机王,总是夸自己的手机有个性,实用性强,并坚持不用智能手机,所以同事对我的转变分析结果就是,外面有情债,所以打着换手机得名义换手机号!!其实之前不用智能手机的主要原因就是费电,经常忘记充电,耽误了不少事,这次买 naxus s 一口气买了 1个车载充电器, 2条usb充电线, 再加上自带的充电器一共4个,应该够用了。

对于 android 我最喜欢的是邮件管理功能,对于我这种邮箱超多,邮件超多的人来说简直是太方便了,通讯录与gmail的地址簿同步的也非常好。此外还装了一个 ssh 工具,方便我处理突发的服务器问题。
希望开源的 android 的越走越好。

Tags:
Posted in Inspire | No Comments »

Cisco ASA 5520 上的 MSS 超限问题

September 23rd, 2011

前段时间给公司换了新的防火墙 Cisco ASA 5520,发现 Webmail 有时会出现无法发送邮件的问题。ASA 上的日志记录如下:

Sep 22 2011 18:05:36: %ASA-4-419001: Dropping TCP packet from outside:1.1.1.1/43403 to inside:2.2.2.2/80, reason: MSS exceeded, MSS 1380, data 1428

1.1.1.1 是 client,2.2.2.2 是 Mail Server,说明从 client 到 server发送了一个 MSS 大小为 1428 的 tcp 包,超过了防火墙规定的 MSS 最大值 1380。在解决这个问题之前,先给自己普及一下网络基础知识。

  • MTU : Maxitum Transmission Unit 最大传输单元,大部分设备的 MTU 都是 1500,包括我们目前使用的 Cisco ASA 和 Mail Server。
  • MSS : Maxitum Segment Size 最大分段大小,也就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能 TCP 协议在建立连接的时候通常要协商双方的 MSS 值,这个值TCP 协议在实现的时候往往用 MTU 值代替(需要减去IP数据包包头的大小 20Bytes 和 TCP 数据段的包头 20Bytes)所以往往 MSS 为1460。通讯双方会根据双方提供的 MSS 值得最小值确定为这次连接的最大MSS值。

我们的 ASA 使用默认的 Tunneled MSS ,大小为 1380 (MTU-120),如果是普通的 Ethernet MSS 应该是 1460 (MTU-40)。通过 ping -l 测了一下 1.1.1.1 的 MSS 是 1428, 2.2.2.2 的 MSS 是 1460,进行 TCP 通讯时,1.1.1.1 发送一个 1428 大小的包应该是合法的,注意我们的应用要求不能分片(DF),当这个包通过防火墙时,由于防火墙的 MSS 是 1380,所以根据默认的策略会直接被 drop 掉。

可以通过如下方法解决这个问题:
让防火墙不做检测,即使有 MSS 大于 1380的包,也直接放行。在 ASA 上做如下设置

ASA-IDC(config)# access-list MSS_Exceeded_ACL extended permit tcp any any
ASA-IDC(config)# tcp-map mss-map
ASA-IDC(config-tcp-map)# exceed-mss allow
ASA-IDC(config-tcp-map)# exit
 
ASA-IDC(config)# class-map MSS_Exceeded_MAP
ASA-IDC(config-cmap)# match access-list MSS_Exceeded_ACL
ASA-IDC(config-cmap)# exit
 
ASA-IDC(config)# policy-map global_policy
ASA-IDC(config-pmap)# class MSS_Exceeded_MAP
ASA-IDC(config-pmap-c)# set connection advanced-options mss-map
ASA-IDC(config-pmap-c)# end
 
ASA-IDC(config)# wr m

或者设置 2.2.2.2 的 MSS 值,让它小于 1380,这样 1.1.1.1 在与它协商后,会发送 MSS 小于 1380 的包。

参考文档
~~~~~~~
[1] http://www.cisco.com/en/US/products/ps6120/products_configuration_example09186a008081e621.shtml
[2] http://www.cisco.com/en/US/products/hw/vpndevc/ps2030/products_tech_note09186a00804c8b9f.shtml#wa
[3] http://www.scotech.com/kb/?id=1231299060
[4] http://infotech.blog.51cto.com/391844/123859

Tags: ,
Posted in Technology | No Comments »

Fedora 上安装支持 IPSec 的 VPN 客户端

September 2nd, 2011

之前在 PIX 525 上一直使用 pptp 来做 VPN,近期打算换防火墙,目前 Cisco 的主流防火墙是 ASA 5500 系列,
这个防火墙的 ios 都在 7.2 以上,不知为什么,之后的版本已经不再支持 pptp 协议了,也许是安全性的问题吧。
只能使用 Cisco ASA 推荐的 IPSec VPN 隧道。目前在 linux 上支持 IPSec 的 VPN 客户端主要有 vpnc 和 vpnclient。

vpnc
~~~~~~~
一款评价很高的开源工具,个人感觉安装配置简单,使用方便,Fedora 下安装只需一条命令

[tommy@tmypc ~]$ sudo yum install vpnc

配置文件也很简单,参考 /etc/vpnc/default.conf 修改就行了,下面是我的配置

IPSec ID xxxxx                       ## 组名
IPSec gateway xxx.xxx.xxx.xxx        ## vpn 服务器地址
IPSec secret xxx                     ## 组密码
 
IKE Authmode psk
 
## To add your username and password,
## use the following lines: 如果你的 VPN Server 没有设置单独的用户名和密码,下面可以不用写
Xauth username xxxx
Xauth password xxxxxxx
 
## 可以打开下面的注释,不过输出调试信息完全看不懂
# Debug 3

如果对配置文件还有不明白的,可以先安装一个 Windows 客户端,配好连接,然后在安装目录中的 Profiles子目录找到后缀为 pcf 的文件,复制到 linux 中,下载一个Perl 脚本,直接把它转成 vpnc 的配置文件。

[tommy@tmypc ~]$ wget http://svn.unix-ag.uni-kl.de/vpnc/trunk/pcf2vpnc
[tommy@tmypc ~]$ chmod +x pcf2vpnc
[tommy@tmypc ~]$ ./pcf2vpnc cisco.pcf > cisco.conf

我使用的 vpnc 在这个版本有个 Bug,启动的时候会报个 SIOCSIFMTU: Invalid argument 的错误,但不影响使用,可以通过下面的方法修改,可参考关于这个bug的讨论

[tommy@tmypc ~]$ sudo vi /etc/vpnc/vpnc-script
# 在文件最上方加上下面这行
INTERNAL_IP4_MTU=1500

安装完成以后,用下面命令启动和断开连接

[tommy@tmypc ~]$ sudo vpnc cisco
[tommy@tmypc ~]$ sudo vpnc-disconnect

vpnclient
~~~~~~~
Cisco 官方的客户端工具,虽然也好使,但是版本更新很慢,现在的 4.8.02 竟然连 2.6.30 的内核都不支持。好在有人提供了相关的补丁文件,但是编译需要内核的部分源码,在 Fedora 下,该源码可以通过下面的命令直接安装到 /usr/src/kernels 目录下:

[tommy@t42 vpnclient]$ sudo yum install kernel-devel

注意安装的内核源码版本一定要和你当前使用的内核版本一直,否则在启动时会报一个这样的错误

Starting /opt/cisco-vpnclient/bin/vpnclient: insmod: error inserting '.../cisco_ipsec.ko': -1 Invalid module format Failed (insmod)

下载 vpnclient,虽然写的是 64 位版本,但兼容 32 位,解压缩该文件,下载补丁,注意如果你使用的是其它 Linux 发行版, 需要将下面的 /usr/src 改为你的内核源码目录。

[tommy@tmypc ~]$ tar xzvf vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
[tommy@tmypc ~]$ cd vpnclient
[tommy@tmypc ~]$ wget http://lamnk.com/download/vpnclient-linux-2.6.31-final.diff
[tommy@tmypc ~]$ patch < ./vpnclient-linux-2.6.31-final.diff
[tommy@tmypc ~]$ sudo sed -i 's/const\ struct\ net_device_ops\ \*netdev_ops;/struct\ net_device_ops\ \*netdev_ops;/' `find /usr/src -name netdevice.h`
[tommy@tmypc ~]$ sudo ./vpn_install

如果没有在安装的时候设置 vpnclient 进程开机启动,那么在使用前先启动它:

[tommy@tmypc ~]$ sudo /etc/init.d/vpnclient_init start
[tommy@tmypc ~]$ vpnclient connect cisco

cisco 表示你的配置文件 cisco.pcf,该文件保存在 /etc/opt/cisco-vpnclient/Profiles/ 目录下。
Ctrl + c 就可以断开连接了。
如果使用有问题,可以在连接前用下面的命令将日志输出到一个文件 vpn.log,先把日志控制打开

[tommy@tmypc ~]$ sudo vi /etc/opt/cisco-vpnclient/vpnclient.ini
[main]
EnableLog=1
[tommy@tmypc ~]$ sudo /usr/local/bin/ipseclog /var/log/vpn.log  &

有个奇怪的地方,用 vpnc 连接以后, ssh 登录内网服务器时很慢。vpnclient 则没有问题。

参考文档
~~~~~~~
[1] http://forums.fedoraforum.org/showthread.php?t=259317
[2] how_to_install_cisco_vpn_client
[3] how-to-install-cisco-vpn-client-on-ubuntu
[4] http://ubit.buffalo.edu/software/linux/vpn/install.php

Tags: ,
Posted in Technology | No Comments »

Previous page