咱們公司的產品使用了erlang開發,能夠在大多數的Linux發行版安裝使用,我我的就在Ubuntu、Debian、SUSE等安裝過。但客戶使用的Linux發行版各類各樣,網上環境也老是很詭異,指望一上線就可使用那是妄想。
這2天客戶就整了個好久沒用的服務器給咱們安裝,此次狀況真的是很不同,我以爲有必要記錄一下。html
1. 系統是centos 4.4,已經中止了技術支持。node
這個系統版本過低,致使了後面的一系列問題。mysql
多是由於當時的管理員不熟悉Linux,設置的分區更離譜,是我見過的最奇葩的分區方案。linux
整個/分區就給了1G的空間,注意,這仍是包括了/home目錄在內的分區。反正我在使用過程當中,常常報錯。sql
這樣的分區方案極可能是由於考慮不足,而後後來發現分區不合理,而後隨便配置了。其實這樣的狀況,應該使用lvm2,貼一下個人lvm方案。shell
這個是個人虛擬機,使用過程當中發現了硬盤太小,而後加了後面的sda3,使用lvm2歸併一塊兒,掛載/分區。centos
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的默認啓用防火牆的問題,致使整個過程出現了不少問題。