오늘 Redis 사용 도중… “Cannot allocate memory” 오류를 만났다..
이미 많이 알려진 유명한 오류던데.. 나만 몰랐다.. ㅎㅎㅎㅎ
아무튼 한건 기분좋게 해결했다.
관련 내용은 당연히 위키 페이지에 정리해두었다. 🙂
오늘 Redis 사용 도중… “Cannot allocate memory” 오류를 만났다..
이미 많이 알려진 유명한 오류던데.. 나만 몰랐다.. ㅎㅎㅎㅎ
아무튼 한건 기분좋게 해결했다.
관련 내용은 당연히 위키 페이지에 정리해두었다. 🙂
아파치에 ssl 설정을 하고 https 접속을 하려는데 다음의 오류가 나왔다.
Secure Connection Failed
An error occurred during a connection to pchero21.com. SSL received a record that exceeded the maximum permissible length. (Error code: ssl_error_rx_record_too_long)
The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Please contact the website owners to inform them of this problem.
구글링을 해봐도 ssl 모듈을 활성화 시키라는 이야기만 나오고…. 단지 설정값을 이리저리 바꿔보고 테스트하는 삽질만 하고 있었다.
그러다가, 짚히는 부분이 있어서, ssl 인증서를 다시 만들고 테스트를 해봤더니 잘 되었다.
처음 SSL 인증서를 만들 때, 다음의 명령어를 사용했었다.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ./postfix.key -out ./postfix.crt
문제가 되었던 부분은 rsa:2048 부분이었다.
다음의 명령어로 다시 ssl 인증서를 만들고 설정하니 잘 되었다.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout ./postfix.key -out ./postfix.crt
라즈베리 파이를 사면서부터 이걸로 무엇을 해볼까 고민했었는데, 일단은 개인용 클라우드 시스템을 만들기로 했었다.
가이드와 여러 자료들을 살펴가며 열심히 서버를 설정했다.
이윽고, 모든 설치가 정상적으로 설치되고 사용하려고 하는데…
한가지 문제점이 있었다.
최초 클라우드 시스템 동기화를 위해 내 파일들을 업로드를 하는데 시간이 너무 오래 걸리는 것이었다.
하루는 밤새도록 켜놓고 있었는데, 20M 업로드를 했다.
이대로는 못쓰겠다 싶어서 설치 과정중에 문제가 있을까 싶어 몇번이고 재설치를 반복했다.
또한 클라우드 시스템에 붙이기 위해 새로 구입한 외장형 하드디스크도 문제가 있는 것 같아 그 부분도 같이 검증했다.
하드디스크가 좀 걱정이 되었으나 다행히 그부분은 문제가 아니었다.
무엇이 문제였을까…
현상은 파일 업로드가 지나치게 느리다는 것, 클라이언트쪽 실패 메시지를 확인해보니 단지 “Internal Error”라고만 나왔다.
결국 서버쪽 에러 로그를 확인하고난 뒤에서야 원인을 파악할 수 있었는데, 이유인 즉 Sqlite 때문이었다.
Sqlite는 DB Input/Ouput 시 DB 전체에 데이터베이스 Lock 을 걸어버린다.
보통은 이 속도가 금방이기 때문에 순식간에 지나가는데, 이 경우는 무엇때문인지는 모르겠으나,오류 발생 이후 업로드 재시도까지 굉장한 시간이 걸리는 것 같았다.
아무튼 문제는 Sqlite 로 진단하고 Mysql 로 변경해서 설치를 진행한 후, 정상적으로 작동한 것을 확인했다.
아래 내용들은 GCC49 버전으로 컴파일 했을 때 발생한 에러들이다.
GCC46 버전으로 컴파일 시, 다른 에러들이 발생할 수 있다. 가급적 최신의 컴파일러를 사용하자.
Asterisk 컴파일 에러.
컴파일 중 발생한 에러로서, 참조 에러이다. 파일 수정이 필요하다.
creating config.h
[LD] abstract_jb.o acl.o adsi.o alaw.o aoc.o app.o ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o autochan.o autoservice.o backtrace.o bridge.o bridge_after.o bridge_basic.o bridge_channel.o bridge_roles.o bucket.o callerid.o ccss.o cdr.o cel.o channel.o channel_internal_api.o chanvars.o cli.o config.o config_options.o core_local.o core_unreal.o crypt.o data.o datastore.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o endpoints.o enum.o event.o features.o features_config.o file.o fixedjitterbuf.o format.o format_cap.o format_pref.o frame.o framehook.o fskmodem.o global_datastores.o hashtab.o heap.o http.o image.o indications.o io.o jitterbuf.o json.o loader.o lock.o logger.o manager.o manager_bridges.o manager_channels.o manager_endpoints.o manager_mwi.o manager_system.o md5.o media_index.o message.o mixmonitor.o named_acl.o netsock.o netsock2.o optional_api.o parking.o pbx.o pickup.o plc.o poll.o presencestate.o privacy.o rtp_engine.o say.o sched.o sdp_srtp.o security_events.o sem.o sha1.o sip_api.o slinfactory.o sorcery.o sounds_index.o srv.o stasis.o stasis_bridges.o stasis_cache.o stasis_cache_pattern.o stasis_channels.o stasis_endpoints.o stasis_message.o stasis_message_router.o stasis_system.o stdtime/localtime.o strcompat.o strings.o stun.o syslog.o taskprocessor.o tcptls.o tdd.o term.o test.o threadpool.o threadstorage.o timing.o translate.o udptl.o ulaw.o utils.o uuid.o version.o xml.o xmldoc.o editline/libedit.a -> asterisk
ast_expr2.o: In function `op_func’:
/usr/local/src/asterisk-12.2.0/main/ast_expr2.y:884: warning: powl has lower than advertised precision
/usr/local/bin/ld: asterisk: local symbol `__progname’ in /usr/lib/crt1.o is referenced by DSO
/usr/local/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
gmake[2]: *** [asterisk] Error 1
gmake[1]: *** [main] Error 2
gmake[1]: Leaving directory `/usr/local/src/asterisk-12.2.0′
*** Error code 2Stop.
make: stopped in /usr/local/src/asterisk-12.2.0
해결책은 해당 에러가 난 후에, main/asterisk.exports 파일에 다음의 패치 내용을 적용해주면 된다.
--- /usr/ports/net/asterisk/work/asterisk-1.8.11.0/main/asterisk.exports 2012-04-01 11:19:50.532808549 -0700
+++ /root/asterisk.exports 2012-04-01 10:43:28.258979089 -0700
@@ -44,6 +44,8 @@
res_srtp;
res_srtp_policy;
secure_call_info;
+ __progname;
+ environ;
local:
*;
};
spandsp 모듈 에러.
spandsp 모듈은 FAX 관련 모듈로 설치시 다음과 같은 오류가 발생했다.
[CC] res_speech.c -> res_speech.o
[LD] res_speech.o -> res_speech.so
[CC] res_fax_spandsp.c -> res_fax_spandsp.o
res_fax_spandsp.c: In function ‘spandsp_v21_new’:
res_fax_spandsp.c:470:52: error: ‘MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE’ undeclared (first use in this function)
p->tone_state = modem_connect_tones_rx_init(NULL, MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE, spandsp_v21_tone, p);
^
문제의 원인은 낮은 버전의 라이브러리를 설치했기 때문이었다. 내가 설치했던 spandsp 패키지에서 제공하는 헤더파일에는 “MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE” 선언이 없었던 것.
이미 Asterisk 를 설치한 다른 시스템에서 해당 헤더파일을 비교한 후에야 문제를 해결할 수 있었다.
해당 선언이 들어있는 패키지는 spandsp-devel 패키지이다.
그냥 설치하려고 하면 의존성 문제가 발생하므로 이전에 설치한 패키지를 지우고 새로 설치하도록 하자.
pkg delete spandsp
pkg install spandsp-devel
참조 : http://forums.asterisk.org/viewtopic.php?f=1&t=81017
————————————————————————–
하지만 make install 과정에서 asterisk.h 파일을 찾을 수 없다는 에러만 계속 나왔다.
결국 적당한 시점에서 타협을 해야 했는데.. 그냥 pkg 에 올려져 있는 asterisk 를 사용하기로 했다.
설치한 asterisk 버전은 11.8.1 이다.
사용가능한 Python 모듈들을 알아보기 위해 python 인터프리터에서 전체 모듈보기 명령어를 입력했는데, 다음과 같은 오류 메시지를 확인했다.
pchero@MyDebian:/usr/lib/pymodules/python2.7$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help('modules')
Please wait a moment while I gather a list of all available modules...
/usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning: g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
import gobject._gobject
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: cannot register existing type `GtkWidget'
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: cannot add class private field to invalid type '<invalid>'
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: cannot register existing type `GtkBuildable'
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: g_type_interface_add_prerequisite: assertion `G_TYPE_IS_INTERFACE (interface_type)' failed
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:142: Warning: g_once_init_leave: assertion `result != 0' failed
g_type = info.get_g_type()
/usr/lib/python2.7/dist-packages/gi/module.py:146: Warning: g_type_get_qdata: assertion `node != NULL' failed
type_ = g_type.pytype
그리고 Hang 이 걸린듯 더이상 진행되지 않았다.
해결법을 찾던 도중, http://blog.rabbitvcs.org/archives/312 에서 비슷한 현상에 대한 해결법을 찾았는데 뭔가 완벽하진 않았다.
http://stackoverflow.com/questions/13301100/python-fail-to-display-list-of-modules 여기도 역시…
내용인 즉, help(‘modules’) 를 입력하기 전에 gtk 모듈을 먼저 load 하라는 것인데.. 깔끔하지 않았다.
pchero@MyDebian:/etc$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
>>>
>>>
>>> help('modules')
Please wait a moment while I gather a list of all available modules...
/usr/lib/python2.7/dist-packages/keybinder/__init__.py:26: GtkWarning: IA__gdk_keymap_get_for_display: assertion `GDK_IS_DISPLAY (display)' failed
from _keybinder import *
/usr/lib/python2.7/dist-packages/keybinder/__init__.py:26: GtkWarning: IA__gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
from _keybinder import *
** (.:7702): WARNING **: keybinder_init: Unable to open display
ANSI _codecs_iso2022 fdpexpect pyatspi
ArgImagePlugin _codecs_jp feedparser pyclbr
BaseHTTPServer _codecs_kr filecmp pycurl
Bastion _codecs_tw fileinput pydoc
BdfFontFile _collections fnmatch pydoc_data
BeautifulSoup _csv formatter pyexpat
BeautifulSoupTests _ctypes fpconst pygtk
BmpImagePlugin _ctypes_test fpectl pynotify
BufrStubImagePlugin _curses fpformat quopri
CDROM _curses_panel fractions random
CGIHTTPServer _dbus_bindings freeswitch re
Canvas _dbus_glib_bindings ftplib readline
ConfigParser _elementtree functools reportbug
ContainerIO _functools future_builtins reportlab
Cookie _hashlib gc repr
CurImagePlugin _heapq gconf resource
DLFCN _hotshot genericpath rexec
DcxImagePlugin _imaging getopt rfc822
Dialog _imagingcms getpass rlcompleter
DocXMLRPCServer _imagingft gettext robotparser
EpsImagePlugin _imagingmath gi runpy
ExifTags _io gio scanext
FSM _json glib sched
FileDialog _locale glob screen
FitsStubImagePlugin _lsprof gnome select
FixTk _multibytecodec gnome_sudoku serial
FliImagePlugin _multiprocessing gnomecanvas sets
FontFile _pyio gnomevfs setuptools
FpxImagePlugin _random gobject sgmllib
GbrImagePlugin _renderPM grp sgmlop
GdImageFile _rl_accel gtk sha
GifImagePlugin _socket gtkunixprint shelve
GimpGradientFile _sqlite3 gtweak shlex
GimpPaletteFile _sre gzip shutil
GnuPGInterface _ssl hamster signal
GribStubImagePlugin _strptime hashlib site
HTMLParser _struct heapq sitecustomize
Hdf5StubImagePlugin _symtable hmac smtpd
HelloModule _sysconfigdata hotshot smtplib
IN _sysconfigdata_nd hpmudext sndhdr
IcnsImagePlugin _testcapi htmlentitydefs socket
IcoImagePlugin _threading_local htmllib softwareproperties
ImImagePlugin _warnings httplib speechd
Image _weakref httplib2 speechd_config
ImageChops _weakrefset ihooks spwd
ImageCms abc imaplib sqlite3
ImageColor aifc imghdr sre
ImageDraw antigravity imp sre_compile
ImageDraw2 anydbm importlib sre_constants
ImageEnhance apt imputil sre_parse
ImageFile apt_inst inspect ssl
ImageFileIO apt_pkg invest starpy
ImageFilter aptdaemon io stat
ImageFont aptsources itertools statvfs
ImageGL argparse json string
ImageGrab array keybinder stringold
ImageMath ast keyword stringprep
ImageMode asynchat lib2to3 strop
ImageOps asyncore libxml2 struct
ImagePalette atexit libxml2mod subprocess
ImagePath atk linecache sunau
ImageQt audiodev linuxaudiodev sunaudio
ImageSequence audioop locale symbol
ImageShow axi logging symtable
ImageStat base64 louis sys
ImageTransform bdb lsb_release sysconfig
ImageWin binascii macpath syslog
ImtImagePlugin binhex macurl2path tabnanny
IptcImagePlugin bisect mailbox tarfile
JpegImagePlugin bonobo mailcap telnetlib
McIdasImagePlugin brlapi mako tempfile
MicImagePlugin bsddb markupbase termios
MimeWriter bz2 markupsafe test
MpegImagePlugin cPickle marshal test1
MspImagePlugin cProfile math textwrap
ORBit cStringIO md5 this
OleFileIO cairo mhlib thread
OpenSSL calendar mimetools threading
PAM caribou mimetypes tidy
PIL cgi mimify time
PSDraw cgitb mmap timeit
PaletteFile chardet mod_fstest tkColorChooser
PalmImagePlugin chunk mod_test tkCommonDialog
PcdImagePlugin cmath modulefinder tkFileDialog
PcfFontFile cmd multifile tkFont
PcxImagePlugin code multiprocessing tkMessageBox
PdfImagePlugin codecs mutex tkSimpleDialog
PixarImagePlugin codeop netrc toaiff
PngImagePlugin collections new token
PpmImagePlugin colorsys nis tokenize
PsdImagePlugin commands nntplib trace
Queue compileall ntpath traceback
SOAPpy compiler nturl2path ttk
ScrolledText contextlib numbers tty
SgiImagePlugin cookielib numpy turtle
SimpleDialog copy opcode twisted
SimpleHTTPServer copy_reg operator types
SimpleXMLRPCServer crypt optparse unicodedata
SocketServer csv orca unittest
SpiderImagePlugin ctypes os uno
StringIO cupsext os2emxpath unohelper
SunImagePlugin curl ossaudiodev urllib
TYPES curses packagekit urllib2
TarIO datetime pango urlparse
TgaImagePlugin dbhash pangocairo user
TiffImagePlugin dbm parser uu
TiffTags dbus pcardext uuid
Tix deb822 pdb vte
Tkconstants debconf pexpect warnings
Tkdnd debian pickle wave
Tkinter debian_bundle pickletools weakref
UserDict debianbts pip webbrowser
UserList decimal pipes whichdb
UserString defer pkg_resources wnck
WalImageFile difflib pkgutil wsgiref
WmfImagePlugin dircache platform xapian
XVThumbImagePlugin dis plistlib xdg
XbmImagePlugin distutils popen2 xdrlib
XpmImagePlugin doctest poplib xml
_LWPCookieJar drv_libxml2 posix xmllib
_MozillaCookieJar dsextras posixfile xmlrpclib
__builtin__ dumbdbm posixpath xxsubtype
__future__ dummy_thread pprint zeitgeist
_abcoll dummy_threading profile zipfile
_ast easy_install pstats zipimport
_bisect email pty zlib
_bsddb encodings pwd zope
_codecs errno pxssh
_codecs_cn exceptions pyHnj
_codecs_hk fcntl py_compile
Enter any module name to get more help. Or, type "modules spam" to search
for modules whose descriptions contain the word "spam".