我們公司的產品使用了erlang開發,可以在大多數的Linux發行版安裝使用,我個人就在Ubuntu、Debian、SUSE等安裝過。但客戶使用的Linux發行版各種各樣,網上環境也總是很詭異,期望一上線就可以使用那是妄想。
這2天客戶就整了個很久沒用的服務器給我們安裝,這次情況真的是很不一樣,我覺得有必要記錄一下。
1. 系統是centos 4.4,已經停止了技術支持。
這個系統版本太低,導致了后面的一系列問題。

可能是因為當時的管理員不熟悉Linux,設置的分區更離譜,是我見過的最奇葩的分區方案。

整個/分區就給了1G的空間,注意,這還是包括了/home目錄在內的分區。反正我在使用過程中,經常報錯。

這樣的分區方案很可能是因為考慮不足,然后后來發現分區不合理,然后隨便配置了。其實這樣的情況,應該使用lvm2,貼一下我的lvm方案。


這個是我的虛擬機,使用過程中發現了硬盤過小,然后加了后面的sda3,使用lvm2歸並一起,掛載/分區。
2. 添加源
CentOS 4.x早已沒有技術支持了,而且很多軟件源不可用。查看了下面2個連接,配置了軟件源。
cd /etc/yum.repos.d mv CentOS-Base.repo CentOS-Base.repo.bak wget http://vault.centos.org/4.9/CentOS-Base.repo
然后更新yum緩存
yum clean all && yum clean metadata && yum clean dbcache && yum makecache
接着下載安裝erlang源碼編譯的必要軟件包,參考了
參考 CentOS(Fedora)下源代碼編譯安裝 erlang 環境的 shell 腳本
yum install -y kernel-devel m4 fop ncurses-devel openssl-devel tk unixODBC unixODBC-devel
然后編譯安裝erlang。
3. mysql版本太低,添加centosplus源
原來的mysql版本是4.1.22, 我們的產品使用mysql的版本必須是5.0以上。繼續折騰。
google了半天,發現在centosplus源有mysql 5.0的rpm包,但我們的源不會啟用centosplus,查看了下面的
主要是設置enabled=1,下面貼一下我的repo配置:
additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus baseurl=http://vault.centos.org/4.9/centosplus/$basearch/ gpgcheck=1 enabled=1 gpgkey=http://vault.centos.org/RPM-GPG-KEY-centos4 protect=1 priority=2
4. 停止iptables
使用setup命令行停止iptables,我們的產品可以使用了。

但第二天,服務器重啟了,我們的產品又運行不行,發現還是iptables運行了,阻止了我們產品的網絡連接。但我已經設置了iptables停止運行了的,什么情況?
查找了半天,原來是setup那里還有個防火牆配置問題。這里也要設置一下。


由於 ssh連接到4.4的服務器那個界面實在太難看,這里截圖用的是6.5版本的centos界面,中文的。
5. erlang連接不了網絡
# ./start.sh live {error_logger,{{2014,3,21},{10,35,48}},"Protocol: ~p: register error: ~p~n",["inet_tcp",{{badmatch,{error,duplicate_name}},[{inet_tcp_dist,listen,1},{net_kernel,start_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}]} {error_logger,{{2014,3,21},{10,35,48}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[#Port<0.68>,<0.17.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,running},{heap_size,377},{stack_size,24},{reductions,473}],[]]} {error_logger,{{2014,3,21},{10,35,48}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfa,{net_kernel,start_link,[['groupchat@127.0.0.1',longnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]} {error_logger,{{2014,3,21},{10,35,48}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfa,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]} {error_logger,{{2014,3,21},{10,35,48}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]} {"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"} Crash dump was written to: erl_crash.dump Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
原來是epmd的問題,停了,再開就可以了。
# ps -ef|grep erl root 4670 1 0 Mar20 ? 00:00:00 /usr/lib/erlang/erts-5.7.5/bin/epmd -daemon root 24263 19882 0 10:35 pts/0 00:00:00 grep erl # kill -9 4670
總的來說,由於服務器太舊,導致源設置困難、軟件版本低,然后centos的默認啟用防火牆的問題,導致整個過程出現了很多問題。
